파비의 매일매일 공부기록

파이썬 병렬 프로그래밍 - #1 병렬, 동시성, 분산 프로그래밍 문맥 설명 본문

Study/Python

파이썬 병렬 프로그래밍 - #1 병렬, 동시성, 분산 프로그래밍 문맥 설명

fabichoi 2021. 7. 19. 23:30

이번장은 병렬, 동시성, 분산 프로그래밍 콘텍스트(문맥)에 대한 내용이다.

대략적인 내용은 책을 보지 않아도 알고 있다.

병렬 : 한 번에 여러 작업을 수행

동시성 : 동시에 여러 작업을 수행

분산 프로그래밍 : 동시에 여러 작업을 수행하는데 필요한 프로그래밍

 

근데.. 내가 아는 내용이 맞는 걸까? 책을 보면서 조금씩 개념을 잡아봐야겠다.

 

병렬 프로그래밍 사용 이유 : 개발자가 앱의 성능 최적화를 하기 위함. 결과적으로 UX 뿐 아니라 RESOURCE 소모도 개선 가능.

 

일반적인 병렬화 : 동시성 시스템과 비슷하다고 혼동하는 경우가 다수. 동시성 프로그래밍은 병렬 프로그래밍의 추상화.

 - 분산 프로그램의 인기 이유 : 무정지, 수평적 확장, 클라우드 컴퓨팅. 결국은 독립적인 프로세스들이 존재함으로써 확장 및 교체가 쉽고 무정지 시스템을 구축 가능함.

 

병렬 프로그래밍에서의 통신 : 그러나 문제는 서로 다른 작업들끼리 통신을 자주 해야 함. 통신 방식은 크게 두 가지가 있음.

 - 공유 상태 : 프로세스 중 하나가 자원을 공유하는 유효하지 않은 작업을 수행 시 다른 프로세스에 영향 끼칠 수 있음. 뮤 텍스 같은 기능으로 제어

 - 메시지 전달 : 실행 중인 프로세스에서 메시지를 교환하는 메커니즘으로 구성. 데이터 접근이 동시에 발생하지 않으며 로컬이나 분산 환경에서 메시지 교환 가능. 확장성 문제가 거의 없으며 다른 시스템 간 상호 운용 가능. 일반 프로그램 유지관리 쉬움

 

병렬 프로그래밍의 문제점 : 자격증 시험 또는 면접 질문으로 많이 나오는 주제 중 하나인 듯.

- 교착상태(데드락) : 두 개 이상의 작업자가 자원이 해제될 때까지 영원히 기다리는 현상. 

- 기아상태(스타베이션) : 하나 이상의 프로세스가 불공정한 순위로 실행되어 생기는 문제. 특정 프로세스는 계속 실행이 안됨.

- 경쟁조건(레이스 컨디션) : 프로세스 결과가 순서에 의존하면 동기화 메커니즘이 없어 순서가 깨지게 되어 경쟁 조건에 직면함. 동기화 메커니즘은 필수.

 

파이썬 병렬 프로그래밍 도구 찾기

- 파이썬 threading 모듈

- 파이썬 multiprocessing 모듈

- Parallel 파이썬 모듈 

- 셀러리: 분산 태스크 큐

반응형
Comments