파비의 매일매일 공부기록

파이썬 동시성 프로그래밍 - #3 스레드 라이프 본문

Study/Python

파이썬 동시성 프로그래밍 - #3 스레드 라이프

fabichoi 2021. 8. 10. 23:30

이번장에서는 스레드를 통한 작업 수행에 대한 내용을 다룬다.

 

스레드 상태 : running, not-running, runnable, starting, ended

- 일반적으로 스레드를 생성한다고 자원을 바로 할당받지 않는다. 초기화되었으므로 아무런 상태가 아니며 시작 혹은 정지될 수 있다.

- New Thread : 스레드가 시작되지도, 자원을 할당받지도 않은 상태. 객체 인스턴스만을 나타냄

- Runnable : 스레드 실행 전의 준비 상태. 필요한 모든 자원을 갖고 있으며 작업 스케줄러는 실행에 필요한 스케줄링 준비 중

- Running : 작업 스케줄러에 의해 선택된 작업을 실행. 이후 스레드가 종료되면 데드 상태 또는 비실행 상태로 넘어감

- Not-Running : 스레드가 정지된 상태. 장시간의 입출력 요청 반응에 대기하는 등 여러 이유로 발생. 스레드 실행이 완료될 때까지 일부러 차단되기도 함

- Dead : 여러 이유로 데드 상태가 됨. 자연스럽게 종료되는 경우도 있고 아닌 경우도 있음. 자연스럽게 종료되지 않는 경우 심각한 문제로 이어질 수 있음

 

여러 형태의 스레드

- POSIX 스레드 : IEEE POSIX 1003.1c 스탠더드에 따라 구현된 스레드. UNIX 시스템 상의 수많은 하드웨어 스레드 구현의 표준을 정하고자 개발됨. PThreads라고도 함.(리눅스에서 몇 번 본 듯..?)

- 윈도 스레드 : 마소에서 자체적으로 로우 레벨 스레드를 구현한 형태. POSIX와는 많은 차이가 있으나 API가 간단하며 전반적으로 가독성 높은 형태를 띠고 있음.

 

포킹(forking)

- 주어진 프로세스를 모방하는 것을 의미. github에서의 fork와 비슷한 의미인 듯.

- 자체 주소 공간과 함께 부모의 데이터와 프로세스 내의 코드 실행까지 정확하게 복사됨. 그 후, 복제된 프로세스는 자체의 프로세스 식별자(PID)를 받아 복제된 대상인 부모 프로세스와는 독립적으로 작동

- 프로세스를 복제하는 이유 : 각 프로세스가 충돌하고 종료되는 등의 영향 없이, 동시에 실행될 때와 같은 상황에서 새로운 요청에 계속적으로 대응할 수 있기 때문

 

스레드 데몬화

- 데몬 스레드 : 종료점이 정의되지 않은 '실질적인' 스레드. 프로그램이 종료될 때까지 계속 작동

- 데몬 스레드는 백그라운드에 위치해, 서비스 레지스트리로 주기적으로 변경 없이 갱신 값을 전달. 인스턴스가 종료되는 것을 걱정할 필요 없이 알아서 관리

 

운영체제에서 스레드를 다루는 방법

- 프로세스 생성과 스레드 생성 : 프로세스는 스레드 보다 복잡한 형태(한 프로세스에서 멀티스레드가 작동하기 때문). 프로세스는 각각의 GIL 인스턴스 형태를 띠므로, 일반적인 스레드보다 CPU 기반 작업을 더 수행할 수 있음.

 

멀티스레딩 모델

- 한 하드웨어 내 두 종료의 스레드(사용자 스레드와 커널 스레드)가 있음.

- 1개의 사용자 스레드 - 1개의 커널 스레드 매핑 : 커널 스레드의 생성과 유지에 많은 부하가 걸리지만 그 외 사용자 스레드로부터 방해를 받지 않음

- 다수의 사용자 스레드 - 1개의 커널 스레드 매핑 : 사용자 스레드를 효율적으로 사용할 수 있지만, 사용자 스레드가 정지되면 동일한 커널 스레드에 연결된 그 외 스레드도 정지됨

- 다수의 사용자 스레드 - 다수의 커널 스레드 매핑 : 개별적인 사용자 스레드는 단일 및 복수의 커널 스레드 모두와 결합 형태로 매핑 가능. 사용자(개발자)가 특정 사용자 스레드와 커널 스레드의 매핑 결정 가능, 멀티 스레드 환경에서 전반적으로 높은 성능 향상을 보장

- 파이썬 내에서는 일반적으로 1개의 사용자 스레드 - 1개의 커널 스레드 매핑 방식 채택

- asyncio와 같은 멀티스레드와 같은 함수성 프로그래밍 구현 모듈 활용

 

중간중간 나오는 예제 코드들은 책을 참조하면 좋을 듯.

예제 안에도 이해하는데 도움이 되는 코드 및 설명들이 많음.

반응형
Comments