블록킹과 논 블록킹

ClassBinu·2024년 4월 10일

F-lab

목록 보기
2/65

블록킹과 논블록킹

I/O 작업이 끝날 때까지 해당 스레드 실행 중지 여부에 따라 다름
블록킹: I/O 작업이 끝날 때까지 스레드에서 다른 실행을 하지 않음.
논 블록킹: I/O 요청만 해놓고 같은 스레드에서 다른 작업을 함. 이후 I/O 처리 완료 신호가 오면 I/O 완료 작업을 스레드에서 처리함.

동기와 비동기

코드 상에서 위에서 아래로 코드를 작성한 순서대로 작동한다면 동기
코드 순서에 무관하게, 위에 작성한 코드라고 해서 먼저 작동하지 않으면 비동기

싱글 스레딩과 멀티 스레딩

싱글: 프로세스 내 실행 흐름인 스레드가 1개만 있음
멀티: 프로세스 내 실행 흐름인 스레드가 여러 개 있음

물리적인 스레드 수가 아니라 주 실행 흐름의 책임 여부에 따라 달라짐.

의문

논 블록킹 I/O를 구현할 수 있는 가장 간단한 방법이 멀티 스레딩?

꼭 그런건 아님. 멀티 스레딩으로 구현할 수 있지만,
노드 처럼 이벤트 기반으로 처리할 수 있음.

즉, 주 실행 흐름에 대한 책임을 모든 스레드가 책임을 지면서,
각각 I/O 작업을 전담하면 논 블록킹 I/O를 구현할 수 있음.
(한 스레드에서 I/O 작업이 시작되면, 코어를 양보하는 식으로)

싱글 스레드로 논 블록킹 I/O를 구현할 수 있는가?

있음. 메인 스레드는 싱글 스레드로 작동하고 I/O 작업만 전담하는 별도 보조 스레드를 구현함.

블록킹은 동기, 논 블록킹은 비동기에 매칭되나?

아님.
블록킹/논 블록킹은 주로 I/O 작업시 다른 스레드의 코어 점유 여부에 따라 결정됨.
동기/비동기는 더 넓은 범위의 작업의 실행 순서와 완료 처리 방식에 따라 결정됨.

블록킹은 대개 동기적으로 처리됨.
논 블록킹은 대개 비동기적으로 처리됨.
그렇다고 모든 논 블록킹이 비동기적인 건 아님.
일부 논 블록킹은 동기적인 컨텍스트에서 결과 확인 가능.

솔직히 아직 명확하게 설명 못 하겠음.
이건 계속 더더더더 찾아보기

0개의 댓글