카테고리 없음
coroutine & parallelism
SciomageLAB
2024. 9. 9. 09:49
반응형
코루틴은 일반적으로 프로그래밍 언어에서 여러 작업을 협력적으로 실행하면서, 서로 상태를 저장하고 다시 돌아와서 실행하는 기능을 말합니다. 코루틴은 병행 프로그래밍에서 사용되며, 함수 호출과 달리 제어권을 특정 지점에서 반환하고(python의 yield처럼) 나중에 다시 이어서 실행할 수 있습니다.
Bash에서의 코루틴 개념
Bash는 본래 절차적 언어이기 때문에 코루틴이 명시적으로 지원되지 않지만, 파이프(pipe)를 사용하여 여러 프로세스가 데이터를 주고받으면서 동시에 협력적으로 실행될 수 있게 하여 coroutine을 흉내낼 수 있다.
coroutin과 thread, multiprocessing의 차이
특정 | coroutine | Thread | Multi Processing |
---|---|---|---|
제어 방식 | 명시적으로 제어권을 넘김 (yield 등) | 운영체제 스케줄러가 제어 | 운영체제 스케줄러가 제어 |
실행 방식 | 협력적(concurrent), 비동기적 실행 | 병렬(parallel), 선점형 멀티태스킹 | 병렬(parallel), 선점형 멀티태스킹 |
실행 단위 | 단일 스레드에서 협력적으로 실행 | 하나의 프로세스 내의 여러 스레드 | 여러 독립된 프로세스 |
병렬성 | 병렬성 없음 | 멀티 코어 실행 | 멀티 코어 실행 |
메모리 공유 | 없음 | 스레드 간 공유 | 없음 |
컨텍스트 전환 | 빠름, 사용자 레벨에서 전환 | 빠름 (운영체제 레벨 문맥 전환) | 느림. 운영체제 레벨에서 문맥 전환 |
운영체제 개입 | 없음 (사용자 코드에서 직접 관리) | 운영체제가 관리 | 운영체제가 관리 |
동기화 문제 | 단일 스레드에서 실행되므로 동기화 문제 거의 없음 | 동시성 문제 발생 가능, 락(lock) 등의 동기화 필요 | 복잡 (프로세스 간 통신 필요) |
멀티코어 활용 | 단일 스레드에서만 실행 | 멀티코어에서 병렬로 실행 가능 | |
주 사용 용도 | 비동기 I/O 작업, 경량 병행 처리 | I/O 바운드 작업, CPU 병렬 처리 | CPU 집약적 작업, 병렬 처리 |
반응형