- threading
- python 은 GIL 이 있어서 병렬로 동작은 안된다
- single thread 방식
- i/o 바운드 프로세스 vs cpu 바운드 프로세스
- python 에서는 cpu 연산이 많은 것을 쓰레드로 실행하면 성능 향상을 하기 어렵다
- 질문
- 멀티 프로세스, 멀티 쓰레드는 파이썬에만 있는가?
- 모든 언어에있다.
- 누구 자원인가?
- os 가 관리하는 것이다. (os 에 멀티 프로세스, 멀티 스레드 라이브러리가 있는 것)
- 왜 두개가있는지
- 프로세스끼리는 남의 변수를 읽을 수 없다.
- IPC(inter process comunication: 커널 메세지큐 공유메모리 등) 을 이용해서 자원 공유를 해야함
- 사용하기 까다롭다
- 이게 불편하니까 쓰레드 개념도 사용한다.
- 프로세스끼리는 남의 변수를 읽을 수 없다.
- 쓰레드 : 프로세스 내에서 쪼개진것
- 자원(변수) 을 공유하기는 쉽다. (일반적으로 잘 못 쓰면 프로그램이 죽는다.)
- 파이썬은 GIL 이 있어서 아무렇게 써도 죽지는 않는다.
- 디버깅 하기 힘들다
- 쓰레드는 왜쓰나? block 되는 작업에 쓴다
- block 이 한번 되면 다음 코드로 진행이 안되기 때문에 쓰레드를 이용해서 다른 작업을 따로 할 수 있다.
- 예 - socket
- create
- listen
- accept - 블락됨 (일반적인 코드에서는 다음 작엄을 못한다. -> 쓰레드 사용)
- Lock()
- 락은 순서제어를 위해 쓴다
- 예
- 어떤 공유 변수가 있다.
시작 - 작업 - 끝
과 같은 로직이 있다.작업
을 진행 할 때는 해당 변수를 다른 쓰레드가 접근하면 안되기 때문에 접근을 막아서 순서를 제어 하기 위한 것이다.
- 어떤 공유 변수가 있다.
- 멀티 프로세스, 멀티 쓰레드는 파이썬에만 있는가?
- python 은 GIL 이 있어서 병렬로 동작은 안된다
- global / local 변수
- global / nonlocal 키워드 사용
- assign 을 진행할때 (construct 를 생성할때) 는 키워드가 필요
- function 안에서 는 변수가 읽을 수 는 있다.
- 예제 코드 참조
- global / nonlocal 키워드 사용