Today I Learned
- 스레드(Thread)와 코루틴(Coroutine)의 차이?
=> 두 기술모두 멀티태스킹을 구현하지만 차이점이 있다.
(1) 스레드는 운영체제에 의해 관리되면서 여러 작업을 수행. 각 스레드는 자체 스택을 가지고 있어서 독립적인 흐름을 가진다.
멀티 프로세싱과 비교한다면 스레드는 오버헤드가 적고 자원 공유가 쉽지만 동기화 문제를 고려해야한다는 특징
(2) 코루틴은 스레드와 달리, 언어차원에서 제공되는 기능이며 일반적인 함수와 유사하지만 실행중인 함수를 일시중지 하고 나중에 다시 시작할 수 있는 함수이다. 이를 통해 비동기 작업의 동시성(concurrency)를 구현할 수 있다.
코루틴은 스레드보다 더 가볍고, 빠르며, 동기화 문제가 발생하지 않는다. 하지만 코루틴은 하나의 실행스레드에서 실행되는 특징이 있다.
=> 각각 장단점이 존재하므로 목적에 따라 사용하면 된다.
스레드는 I/O-bound작업 및 병렬처리
코루틴은 I/O-bound작업 및 비동기 이벤트 처리
- async / await 코루틴와 레거시 코루틴?
모두 동시성을 구현하는 데 사용되는 기술이지만 다른 방식으로 작동
(1) async / await 코루틴 (Python 3.5도입)
- asyncio 라이브러리를 사용, 상태를 자동 관리하여 편리하고 안전하게 동시성을 구현할 수 있다.> 권장
(2) 레거시 코루틴
- yield, send 등의 명령어를 사용, 개발자가 수동으로 상태를 관리하고 코드가 좀 더 복잡하다. async/await가 지원되지 않는 환경에서 주로 사용한다.
결론!
코루틴과 스레드는 비슷한 동시성을 제공하지만 별개의 개념이며, 프로세스와 스레드는 독립적인 실행환경을 제공하지만 코루틴은 프로그램의 실행 흐름을 일시중단하고 나중에 이어서 실행할 수 있다.
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 TIL 33일차 (2) | 2023.04.27 |
---|---|
내일배움캠프 TIL 32일차 (0) | 2023.04.26 |
내일배움캠프 TIL 30 (0) | 2023.04.24 |
내일배움캠프 TIL 29일차 (0) | 2023.04.21 |
내일배움캠프 TIL 28일차 (0) | 2023.04.20 |