- Synchronous I/O
- Blocking: Blocking I/O
- Non-blocking: Non-blocking I/O
- Asynchronous I/O
- Blocking: I/O Multiplexing(
select
,poll
,epoll
) - Non-blocking: Asynchronous I/O(a.k.a. AIO)
- Blocking: I/O Multiplexing(
===== [Sync][Blocking] - 시작 =====
메인 스레드는 결과를 기다리는 동안 블로킹됩니다. - 시작
동기 작업 시작
동기 작업 종료
메인 스레드는 결과를 기다리는 동안 블로킹됩니다. - 종료
complete execute name = 김철수
===== [Sync][Blocking] - 종료 =====
===== [Sync][Non-Blocking] - 시작 =====
[polling - 1] 메인 스레드는 다른 작업을 수행할 수 있음
[비동기 작업] 작업 진행 중... 1
[polling - 2] 메인 스레드는 다른 작업을 수행할 수 있음
[polling - 3] 메인 스레드는 다른 작업을 수행할 수 있음
[비동기 작업] 작업 진행 중... 2
[polling - 4] 메인 스레드는 다른 작업을 수행할 수 있음
[비동기 작업] 작업 진행 중... 3
[polling - 5] 메인 스레드는 다른 작업을 수행할 수 있음
[비동기 작업] 작업 진행 중... 4
[비동기 작업] 작업 진행 중... 5
[polling - 6] 메인 스레드는 다른 작업을 수행할 수 있음
complete execute name = 홍길동
===== [Sync][Non-Blocking] - 종료 =====
===== [Async][Blocking] - 시작 =====
비동기 작업 시작.
메인 스레드는 결과를 기다리는 동안 블로킹됩니다.
비동기 작업 진행 중... 1
비동기 작업 진행 중... 2
비동기 작업 진행 중... 3
비동기 작업 진행 중... 4
비동기 작업 진행 중... 5
complete execute name = 김철수
===== [Async][Blocking] - 종료 =====
===== [Async][Non-Blocking] - 시작 =====
메인 스레드는 비동기 작업의 완료를 기다리지 않고 계속 실행됩니다.
[비동기 작업] 작업B 진행중... 1
[비동기 작업] 작업A 진행중... 1
[비동기 작업] 작업B 진행중... 2
>> [메인 스레드] 작업 진행중... 1
[비동기 작업] 작업B 진행중... 3
[비동기 작업] 작업A 진행중... 2
[비동기 작업] 작업B 진행중... 4
[비동기 작업] 작업B 진행중... 5
>> [메인 스레드] 작업 진행중... 2
[비동기 작업] 작업A 진행중... 3
[비동기 작업] 작업A 진행중... 4
>> [메인 스레드] 작업 진행중... 3
[비동기 작업] 작업A 진행중... 5
------ 모든 비동기 작업 완료 ------
complete futureA result = 김철수
complete futureB result = 이영희
>> [메인 스레드] 작업 진행중... 4
>> [메인 스레드] 작업 진행중... 5
메인 스레드 작업 완료
===== [Async][Non-Blocking] - 종료 =====