[운영체제] 프로세스와 스레드 꼬리 질문
본문 바로가기

Computer Science/Operating System

[운영체제] 프로세스와 스레드 꼬리 질문

<원티드 프리온보딩 6월 챌린지 AI 세션 3일차 현직자 이야기>에서 나온 내용 참고하여,

[기본 질문에서 나올 수 있는 꼬리 질문들 공부]

(GPT3.5 내용이라 틀린 내용 있을 수 있음. 추후 검증 필요)

 

> 프로세스와 스레드 차이

실행 중인 프로그램을 프로세스라고 하고, 스레드는 프로세스 내에서 실행되는 기본 단위이다.

 

> 멀티프로세싱과 멀티스레딩의 차이

멀티프로세싱은 독립적인 프로세스를 여러 개 사용하여 작업을 병렬로 처리하는 방식이고,

멀티스레딩은 한 프로세스 내에서 여러 스레드를 사용하여 작업을 병렬로 처리하는 방식이다.

파이썬에서, CPU-bound 작업은 멀티프로세싱이 더 적합하고, I/O-bound 작업은 멀티스레딩이 더 적합하다.

왜냐하면 파이썬 인터프리터는 GIL (Global Interpreter Lock)을 사용하여 동시에 하나의 스레드만 실행되도록 제한하는데,

CPU-bound 작업 (연산 집중적 작업)은 멀티스레딩의 성능 향상이 제한적일 수 있어 멀티프로세싱에 더 적합하고,

I/O-bound 작업 (입출력 집중적 작업)을 하는 동안에는 GIL이 해제되기 때문에, 여러 스레드가 동시에 실행될 수 있어서 멀티 스레딩을 통해 성능 향상을 기대할 수 있다.

 

> 파이썬 GIL

GIL은 파이썬 인터프리터가 동시에 하나의 스레드만 실행하도록 제한하는 매커니즘이다.

멀티스레딩 환경에서 안전한 메모리 관리 및 객체 접근을 보장하기 위해 스레드 실행을 제한한다. 

이는 race condition을 방지하는데 유용하지만 CPU-bound 작업에서의 성능 저하를 초래할 수 있다.

GIL은 뮤텍스의 일종

 

> I/O-bound의 경우 멀티스레딩 외에 취할 수 있는 다른 전략

I/O-bound 작업은 파일 읽기/쓰기, 네트워크 요청 등과 같은 입출력 작업에 많은 시간이 소요되는 작업이다.

I/O-bound의 성능을 향상시키기 위한 방법으로,

I/O 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 비동기 프로그래밍 방법이 있다.

asyncio는 파이썬 표준 라이브러리로, 이벤트 루프를 사용하여 비동기 작업을 처리한다.

코루틴(coroutine)은 asyncio 모듈의 도구 중 하나로, 실행 중에 일시 중단하고 다른 작업으로 전환한 다음 나중에 재개할 수 있는 특수한 함수이다. `async def`로 정의되며, `await` 키워드를 통해 비동기 작업을 처리한다.