파이썬 동시성 프로그래밍
학습목표
1. 무엇이 asyncio인지, 그리고 이것의 효용이 무엇인지.
2. concurrency, parellism, threads, process
3. GIL과 이게 주는 concurrency에 대한 챌린지
4. 넌 블러킹 소켓으로 컨커런시를 어떻게 달성하는지 (하나의 스레드로)
5. 이벤트 루프 베이스의 컨커런시가 어떻게 작동하는지
1.1 asyncio란?
- io길게 걸리는 경우가 많음.
- 이때 해결할 수 있는것은 concurrency를 도입하는 것.
- 한번에 핸들하는 태스크가 하나 이상인 경우 --> concurrency
- web request 여러개를 동시에 받거나, 웹서버에 동시에 커넥션을 여러개를 허용하는 경우.
- asyncio를 도입하면 이를 해결할 수 있음.
- 동시성 프로그래밍이란, 특별히 길게 걸리는 태스크가 메인 어플리케이션에 뒤에서 분리되어 실행될수 잇는 것을 의미한다.
- 즉, 하나의 길게 걸리는 태스크가 스턱되지 않는 것을 의미한다.
- python 3.4에서는 데코레이터와 yield from으로, 3.5 부터는 async, await으로 해결
- 이는 synchronous하게 돌아가게끔 보이게함.
- 코루틴이란, 메서드인데 잠재적으로 길게 돌아가는 태스크가 멈출수 있고, 그게 끝나면 다시시작할수있는 방법을 의미함.
- asyncio는 싱글쓰레드 이벤트루프 모델을 사용하여 코루틴들을 비동기적으로 실행하는 라이브러리임.
- io 에만 좋음.
1.3 concurrency, parellism, multitasking
- concurrency
- 동시에 일어나는 일.