일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- FastAPI
- YAML
- EC2
- ansible
- ebs
- K8S
- leetcode
- Deployment
- IAC
- elasticsearch
- Django
- 자바스크립트
- Kubernetes
- Python
- github
- dockerfile
- intervals
- AWS
- terraform
- POD
- docker
- IAM
- asgi
- EKS
- 쿠버네티스
- Service
- kernel
- asyncio
- WSGI
- event loop
- Today
- Total
목록event loop (3)
궁금한게 많은 개발자 노트
동시 프로그래밍(concurrent programming)은 기본적으로 여러 스레드를 활용하여 다중 스레드 프로그래밍을 뜻합니다. 하지만 다중 스레드 환경에서 thread-safe한 프로그래밍을 개발하는 것은 쉽지 않고 고려해야할 사항이 많습니다. 또한, 싱글 코어 프로세서에서 다중 스레드 프로그램을 돌리면 성능이 기대했던 것 보다 나오지 않는 문제가 있습니다. 그래서 단일 스레드에서 비동기적으로 동시에 여러 task를 처리하는 비동기 프로그래밍이 등장하게 되었습니다. python3.4에서 asyncio가 표준 라이브러리로 채택이 되고, 3.5버전에서는 async/await 키워드가 문법으로 채택되면서 파이썬에서도 비동기 프로그래밍이 가능하게 되었습니다. Event Loop 동작 원리 파이썬의 이벤트 루..
[ Task 동시 실행 - asyncio.create_task() ] 위에서 이벤트 루프가 태스크들을 동시적으로(Concurrent, not Parallel) 실행한다고 설명하였다. 그런데 사실 asyncio.run() 함수는 기본적으로 하나의 태스크만을 생성하여 실행한다. 따라서 코루틴 체인 과정에서 추가적인 태스크를 생성하여 실행하지 않았다면 현재의 태스크가 중단되었을 때 이벤트 루프는 실행시킬 다른 태스크가 없게 된다. 태스크가 한 개라면 동시적인(Concurrent) 실행을 하는 것이 애초에 말이 되지 않는 것이다. ※ 여기서 말하는 동시 실행이란 Parallel이 아닌 Concurrent를 말한다. 즉, 엄밀한 의미의 동시가 아니라 여러 태스크들을 왔다 갔다 하며 한 쓰레드에서 실행하는 개념인 ..
asyncio에서는 coroutine과 event loop를 사용하여 비동기 프로그래밍을 지원합니다. 다른 언어에서와 마찬가지로 evnet loop는 task들을 loop를 돌면서 하나씩 실행시키는 역할을 합니다. 만약 실행된 task가 특정한 데이터를 요청하고 응답을 대기해야 한다면 이 task는 제어권을 다시 event loop에 넘겨줍니다. 제어권을 받은 event loop는 다음 task를 실행하게 되고, 응답을 받은 순서대로 task queue에 들어가고 재개되는 task들은 멈췄던 부분부터 다시 제어권을 가지고 작업을 마무리합니다. # 여기서 coroutine이 응답을 대기하는 상태에서 제어권을 event loop로 주는 용도로 await를 사용합니다. coroutine으로 task를 만들고,..