Search
Duplicate
📒

[OS Stduy] 02-2. 비동기 프로그래밍, Non-Blocking

상태
미진행
수업
OS Study
주제
OS
연관 노트
3 more properties
참고

비동기 프로그래밍

NOTE
비동기 ⇒ 한 작업이 완료되기를 기다리지 않고 다른 작업을 진행할 수 있다!
Concurrency(동시성) vs Parallelism(병렬성)
동기 ⇒ 각 Task는 순차적으로 실행된다.
비동기 ⇒ 각 Task는 독립적으로 실행된다.

비동기 프로그래밍 종류

NOTE
비동기 프로그래밍은 멀티 프로세스/스레드 Non-Block IO로 구현이 가능하다!
비동기 케이스 → 작업자를 늘린다. (멀티 프로세스/스레드)
비동기 케이스 → 작업자 1명으로도 비동기작업 (Non-Block IO)
동기적인 시퀀스 ⇒ C가 고장나면 A와 B가 결과를 받지못해 전체적으로 문제가 생김
비동기적인 시퀀스 ⇒ 메시지 큐를 활용해서 각 서비스가 메시지큐만 바라보게한다. (C가 문제생겨도 다른곳에 영향을 끼치지 않음)

Block, Non-Block, Multiflexing IO

NOTE
IO ⇒ 데이터의 입출력을 의미하며 네트워크, 파일 등에서 자주 쓰이는 용어이다!
네트워크의 IO는 Socket을 통해 연결된다!
블로킹과 논블로킹은 다른 요청의 작업을 처리하기 위해 현재 작업을 Block 여부에 따라 구분된다.
동기/비동기는 전체적인 작업에 대한 순차적인 흐름 유무라면, 블로킹/논블로킹은 전체적인 작업의 흐름 자체를 막냐 안막냐의 차이이다.
블로킹 ⇒ 파일을 당

Blocking IO - Synchronous Blocking IO

NOTE
IO 작업을 요청한 프로세스/스레드 요청이 완료될때 까지 대기한다!
kernel에게 IO를 요청하는 함수를 호출(system call) 한 뒤, 작업 결과를 반환하기까지 중단된채 대기한다.
호출할 때마다 요청 Thread를 생성하므로 I/O 요청이 적은 서비스엔 적합하지만, 요청 수가 많아진다면 작업당 한 번의 Context Switching이 발생하므로 비효율적이다.
block된 프로세스/스레드는 CPU를 거의 사용하지 않고 대기하므로, 리소스 효율이 좋지않다,

Non-Blocking IO - Synchronous Non-Blocking IO

NOTE
IO 작업을 요청한 프로세스/스레드 요청에 대한 상태를 즉시 리턴한다.
즉시 결과를 반환(아직 데이터가 없다면 -1)받고 작업을 계속 수행한다.
time gap에 대한 문제가 존재하며 여전히 순차적이다.
하지만 완료된 데이터를 받기위해서 주기적으로 요청하는 작업이 필요하다.
너무 길다 ⇒ 완료한 시간과의 차이가 커져서 느려진다.
너무 짧다 ⇒ CPU 자원을 많이 소비한다.

IO Multiplexing(다중화) - Asynchoronous Blocking IO

NOTE
여러 IO 소켓 또는 채널을 동시에 감시하여 어떤 것이 작업을 수행할 준비가 되었는지 파악하는 방법이다!
멀티 플렉싱 ⇒ 한번의 시스템콜로 여러 이벤트 발생을 한번에 처리
이러한 기법들이 존재한다는 정도만 알아두자.