Blocking I/O
: 호출된 함수가 자신의 작업이 완료될때까지 제어권을 가지고 있음. 타 함수는 대기
Nonblocking I/O
: 호출된 함수가(서브루틴) return 후 호출한 함수(메인 루틴)에 제어권 전달 -> 타 함수는 일 지속
스레드 단점 : 디버깅, 자원 접근 시 레이스 컨디션(경쟁 상태), 데드락(Dead Lock) 등을 고려 후 코딩해야 한다.
코루틴 장점 : 하나의 루틴만 실행 -> 락 관리 필요 X -> 제어 권한으로 실행
코루틴 제약 : 사용 함수가 비동기로 구현이 되어 있거나, 직접 비동기로 구현해야 한다.
async
, await
이 def
, yield
를 각각 대체한다.