파비의 매일매일 공부기록

파이썬 병렬 프로그래밍 - #8 비동기 프로그래밍 본문

Study/Python

파이썬 병렬 프로그래밍 - #8 비동기 프로그래밍

fabichoi 2021. 7. 26. 23:30

책의 마지막 장인 비동기 프로그래밍에 대한 내용이다.

이번장에서는 ASYNCIO 모듈에 포함된 비동기 프로그래밍, 이벤트 루프, 동시 실행 루틴에 대해 알아볼 것이다.

 

블록킹 연산

- 은행 창구에서 고객을 모셔오는 예

- 현재 고객이 필요한 것을 모두 처리할 때까지 다음 고객을 받지 않는다.

- 태스크가 다른 태스크가 끝날 때까지 기다리는 동안에 자원 접근을 막는 블로킹 처리

 

논 블록킹 연산

- 비동기 연산과 혼동하기 쉬움. 그러나 비동기 연산과는 별개임

- 블로킹 연산처럼 다음 고객을 받지 않는 게 아니라, 다른 때나 다른 날짜에 오라고 안내한다.

 

비동기 연산

- 만약 고객의 요청이 특별한 시간제한도 없고 거절 가능한 요청이라면 (예를 들어 대출 심사 서류만 제출하고 가는 작업) 백그라운드에서 작업 후 답변이 준비되면 고객과 접촉해서 안내한다.

 

이벤트 루프

- 폴링 함수 : 시스템의 함수를 이용해 폴링 기술을 구현. 리눅스는 select(), poll(), epoll()의 폴링 함수를 가지며 epoll()이 가장 효과적임

- poller 객체 생성 > poller에 등록하지 않거나 많은 리소스 디스크립터를 등록할 수 있음 > poller 객체에서 폴링 함수 실행

 

이벤트 루프 사용

- 이벤트를 모니터링하는 폴링 함수를 사용 한느 느슨한 추상화로 이벤트 루프를 정의

- 내부적으로 poller 객체 사용. 테스크 추가/제거를 제어하고 이벤트 제어를 하는 프로그래머의 책임 없애줌

 

asyncio를 사용해서 비동기 프로그램을 구현하는 예제가 소개된다.

이 내용도 자세한 부분은 책을 참조하는 걸 추천.

 

반응형
Comments