동시성(Concurrency) vs 병렬성(Parallelism)

박종선·2022년 12월 27일
0

면접/CS

목록 보기
1/2

동시성(Concurrency)

  • 각각의 독립적인 작업들을 작은 단위로 나누어 전환하여 실행(switching)함으로 동시에 실행되는 것처럼 보여주는 것
  • 비동기 방식으로 구현 가능
  • 논리적 개념으로 싱글/멀티 스레드/코어에서 사용 가능

병렬성(Parallelism)

  • 한 번에 여러 작업을 병렬적으로 처리
  • 한 순간에 여러 작업을 같이 실행하는 것
  • 물리적 개념으로 멀티 스레드, 멀티 코어에서 수행
  • 동시성은 논리적 개념이고 병렬성은 물리적 개념이기에 공존할 수 있음

멀티 스레딩에서는 메모리를 공유하기에 병렬적으로 구현할 때 하나에서 에러가 발생하면 다른 부분에서도 에러가 발생할 수 있음
이러한 문제를 해결하기 위해 파이썬에서는 전역 인터프리터 잠금(GIL, Global Interpreter Lock) 도입: 한 순간에 한 개의 스레드만 유지하는 락, 한 스레드가 다른 스레드를 차단하여 다른 스레드가 제어를 얻는 것을 막아 멀티 스레딩의 위험으로부터 보호함
-> 파이썬에서는 스레드로 병렬성 연산을 수행하지 못하며 동시성으로 수행되어야만 함
-> 파이썬 멀티 스레딩은 동시성을 사용하여 io bound 코드에서 유용하게 사용할 수 있으나 cpu bound 코드에서는 GIL에 의해 원하는 결과를 얻을 수 없음
-> 대안: 멀티 프로세싱 사용(단점 발생)


참고

profile
공부한 내용을 정리하는 목적. 내용에 문제가 있으면 언제든지 편하게 지적 부탁드립니다.

0개의 댓글