블로킹 함수를 디스크나 네트워크 입출력의 수행으로 정의하면서, 논블로킹 함수처럼 다루면 안된다. -라이언 달-
블로킹 함수가 전체 애플리케이션의 실행을 멈추지 않게 하는 두 가지 방법
스레드는 제대로 작동하지만, 파이썬이 사용하는 OS 스레드는 각기 수메가바이트의 메모리를 사용하고, 수천 개의 연결을 처리해야 한다면 연결마다 하나의 스레드를 사용할 수 없다.
전통적으로 메모리 부담을 줄이기 위해 콜백으로 비동기 호출을 구현하고, 하드웨어 인터럽트와 비슷한 저수준 개념이고, 응답을 기다리는 대신 어떤 일이 발생할 때 호출될 함수를 등록한다.
이러면 우리가 호출한 것을 논블로킹으로 만들 수 있다.
참고로, 라이언 달은 단순함과 저부하를 위해 콜백을 지지한다.
물론, 비동기 애플리케이션이 의존하는 이벤트 루프가 인터럽트, 스레드, 폴ㄹ링, 백 그라운드 프로세스등 이용해서 여러 동시성 요청이 진행되고, 궁극적으로 완료될 수 있게 보장해주는 기반 구조를 사용할 수 있을 때만 콜백을 사용할 수 있다. 이벤트 루프가 응답을 받으면, 우리 코드를 다시 호출하고, 우리가 실수만 하지 않는다면 이벤트 루프와 우리 애플리케셔인 코드가 공유하는 단일 스레드는 결코 블로킹 되지 않는다.