동기, 비동기
여기서의 동기, 비동기는 프로그래밍 영역이랑 관련이 있다. 개발을 하다보면 "동기 또는 비동기적으로 수행한다" 라는 말을 종종 듣게 된다. 무슨 의미일까?
동기, 비동기는 실행 순서에 관한 개념이다. 동기 코드는 위에서부터 아래로 순차적으로 수행된다. 그래서 순차 코드라고 불리기도 한다. 만약 중간에 I/O 코드가 있으면 I/O 작업이 끝날때까지 대기한 후 다음 코드를 실행한다.
비동기 코드는 순차적으로 실행되지 않는다. 비동기 코드가 수행된 시점부터 프로그램의 실행 순서를 특정할 수 없으며 아래처럼 실행 순서는 3가지 경우로 나눠진다.
- 비동기 코드가 먼저 수행
- 다음의 동기 코드가 먼저 수행
- 비동기 코드와 다음의 동기 코드가 동시 수행
비동기 코드는 실행 순서를 특정할 수 없게 만들어 프로그램이 복잡해진다. 왜 쓰일까? 비동기를 쓰는 이유는 적은 수의 스레드로 다중 요청을 처리하기 위함이다.
사용 이유
1. 싱글 스레드에서 다중 요청 처리(동시성 구현)
JS는 런타임 환경(브라우저, NodeJS)에서 싱글 스레드로 동작한다. 싱글 스레드에서도 여러 요청(이벤트)를 동시에 처리할 수 있도록 보이게끔 만들고자 비동기를 사용한다.
2. 적은 수의 스레드로 다중 요청 처리
기존의 동기식 서버는 하나의 요청을 하나의 스레드에서 처리한다. 하지만 요청 중간에 긴 대기 시간을 가진 I/O 작업이 있고 많은 사용자가 요청한다면 많은 스레드를 필요로 한다. 이는 서버 자원 낭비이며 스레드 스케줄링 비용을 증가시킨다. 비동기를 도입하면 적은 수의 스레드로 많은 요청을 처리할 수 있다는 장점이 있다.
비동기를 쓴다 해도 처리 속도가 빨라지는 건 아니며 프로그램 흐름을 복잡하게 만든다는 단점을 가지고 있다.
한 번 정리해봤는데 개발 경력을 쌓고 나서 다시 써봐야겠다.
참고
https://jennifersoft.com/ko/blog/tech/asynchronous-monitoring/
'Computer Science > OS' 카테고리의 다른 글
[OS - 7] 프로세스 동기화 (0) | 2023.05.25 |
---|---|
[OS - 6] CPU 스케줄링 (0) | 2023.05.03 |
[OS - 5] 스레드 (0) | 2022.11.29 |
[OS - 4] IPC (0) | 2022.11.21 |
[OS - 3] 프로세스 (0) | 2022.11.15 |