gil 2

파이썬 멀티 프로세싱, GIL

GIL(global interpreter lock) 한 순간에 1개의 스레드만 유지하는 락 GIL은 본질적으로 한 스레드가 다른 스레드를 차단해서 제어를 얻는 것을 막음 멀티스레딩의 위험으로부터 보호(하나의 메모리를 공유하므로 오류로 인해 전체가 다운될 수 있음) 그러므로 파이썬은 스레드로 병렬성 연산을 수행하지 못함 파이썬 멀티 스레딩은 동시성을 사용하여 io bound 코드(네트워크)에서 유용하게 사용할 수 있음 하지만 동시성은 cpu bound 코드(연산만 있는)에서 이점이 없음 해결책 멀티 프로세싱으로 병렬성을 구현하여 효율을 높일 수 있음. 단, 프로세스끼리 메모리를 공유하지 않기 때문에 직렬화 역직렬화에 소요되는 비용이 큼 비교 실험 멀티스레딩 22초 멀티프로세싱 13초 (하단 비교 코드 첨부..

동시성(병행성) vs 병렬성

동시성(Cuncurrency) 논리적 개념 at the same time (X) 동시성이란 스위칭으로 한 번에 여러 작업을 동시에 다루는 것을 의미 → 싱글 프로세스, 싱글 스레드가 스위칭을 하면서 여러 작업을 수행 → 멀티스레드도 스위칭하며 작업 가능 비유) 하나의 로봇이 왔다 갔다 하며 작업을 수행 (바운드될 때마다 스위칭) 병렬성(Parallelism) 물리적 개념 at the same time (O) 병렬성은 한 번에 여러 작업을 병렬적으로 처리하는 것을 의미 → 멀티 프로세스, 멀티 스레드를 통해 동시에 여러 작업을 수행 → 싱글 스레드는 불가능 비유) 여러 로봇이 동시에 각자 맡은 작업을 수행 유의할 점 동시성과 병렬성은 함께 공존할 수 있다. 예를 들어 병렬적으로 작업을 수행하면서 그 하위에..