일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Problem Solving
- 만화도
- 매일
- 3줄정리
- 링피트
- 스탭퍼
- 10분
- 잡생각
- Daily Challenge
- 월간
- FIT XR
- 쓰릴오브파이트
- 미드시청
- 프로젝트
- leetcode
- 영어공부
- 운동
- 영어원서읽기
- 화상영어
- 30분
- 리얼 클래스
- realclass
- Writing
- 읽기
- English
- 파비최
- 뭐든
- 괜찮음
- 개발자
- 사이드
- Today
- Total
파비의 매일매일 공부기록
파이썬 병렬 프로그래밍 - #8 비동기 프로그래밍 본문
책의 마지막 장인 비동기 프로그래밍에 대한 내용이다.
이번장에서는 ASYNCIO 모듈에 포함된 비동기 프로그래밍, 이벤트 루프, 동시 실행 루틴에 대해 알아볼 것이다.
블록킹 연산
- 은행 창구에서 고객을 모셔오는 예
- 현재 고객이 필요한 것을 모두 처리할 때까지 다음 고객을 받지 않는다.
- 태스크가 다른 태스크가 끝날 때까지 기다리는 동안에 자원 접근을 막는 블로킹 처리
논 블록킹 연산
- 비동기 연산과 혼동하기 쉬움. 그러나 비동기 연산과는 별개임
- 블로킹 연산처럼 다음 고객을 받지 않는 게 아니라, 다른 때나 다른 날짜에 오라고 안내한다.
비동기 연산
- 만약 고객의 요청이 특별한 시간제한도 없고 거절 가능한 요청이라면 (예를 들어 대출 심사 서류만 제출하고 가는 작업) 백그라운드에서 작업 후 답변이 준비되면 고객과 접촉해서 안내한다.
이벤트 루프
- 폴링 함수 : 시스템의 함수를 이용해 폴링 기술을 구현. 리눅스는 select(), poll(), epoll()의 폴링 함수를 가지며 epoll()이 가장 효과적임
- poller 객체 생성 > poller에 등록하지 않거나 많은 리소스 디스크립터를 등록할 수 있음 > poller 객체에서 폴링 함수 실행
이벤트 루프 사용
- 이벤트를 모니터링하는 폴링 함수를 사용 한느 느슨한 추상화로 이벤트 루프를 정의
- 내부적으로 poller 객체 사용. 테스크 추가/제거를 제어하고 이벤트 제어를 하는 프로그래머의 책임 없애줌
asyncio를 사용해서 비동기 프로그램을 구현하는 예제가 소개된다.
이 내용도 자세한 부분은 책을 참조하는 걸 추천.
'Study > Python' 카테고리의 다른 글
깔끔한 파이썬 탄탄한 백엔드 - #4 HTTP의 구조 및 핵심 요소 (0) | 2021.07.31 |
---|---|
깔끔한 파이썬 탄탄한 백엔드 - #1~#3 (0) | 2021.07.30 |
파이썬 병렬 프로그래밍 - #7 샐러리를 이용한 테스크 분산 (0) | 2021.07.25 |
파이썬 병렬 프로그래밍 - #6 패러렐 파이썬 활용 (0) | 2021.07.24 |
파이썬 병렬 프로그래밍 - #5 multiprocessing과 ProcessPoolExecutor 모듈 사용 (0) | 2021.07.23 |