-
OOP(객체 지향 프로그래밍)에서의 병렬 처리와 멀티스레딩컴공지식/프로그래밍언어론 2024. 9. 2. 23:48
요리사가 동시에 여러 재료를 가공하는 상황이다.
일반적으로, OOP의 요리사(객체) 는 하나의 작업에 집중한다.
예를 들어, 파스타 요리사는 먼저 면을 끓이고, 그 다음에 소스를 준비하고, 마지막으로 접시에 담아 서빙한다.
이 과정은 순차적으로 진행되며, 한 번에 한 가지의 일을 한다.
근데 주방이 바빠지고, 손님 주문이 몰려들어 한 명의 요리사가 여러 재료를 동시에 가공해야 하는 상황이 발생할 수 있다.
예를 들어, 파스타 요리사는 동시에 면을 끓이면서 소스도 준비해야 하고, 한편으로는 샐러드 채소도 씻어야 할 수 있다.
이 상황은 OOP에서 병렬 처리 또는 멀티스레딩으로 비유할 수 있다!
병렬 처리(Parallel Processing)는 주방에서 여러 요리사가 동시에 여러 재료를 가공하는 것과 같다.
프로그래밍에서, 병렬 처리는 여러 스레드가 동시에 실행되면서 작업을 처리하는 것을 의미한다.
멀티스레딩(Multithreading)은 하나의 요리사(객체)가 동시에 여러 가지 일을 처리하는 것과 비슷하다.
요리사가 동시에 여러 스레드를 생성하는데, 면을 끓이는 스레드, 소스를 만드는 스레드, 샐러드를 준비하는 스레드 등을 돌리는 거다.
하지만 이 과정에서 동기화 문제가 발생할 수 있다.
요리사가 소스를 끓이기 위해 팬을 사용하고 있는데, 샐러드 채소를 잠시 볶아야한다고 하는데 팬이 하나밖에 없다면 소스를 끓이는 도중에 샐러드 채소를 볶기 위해 팬을 뺏어가야 할 수도 있다.
또는 소스를 준비할 때, 요리사는 토마토를 사용하는데, 샐러드에도 신선한 토마토가 필요한 상황인데 요리사가 소스를 만드는 중에 토마토를 다 사용해버리면, 샐러드에는 토마토가 부족하게 될 수 있다..
이런 상황에서는 데드락(서로 자원을 기다리며 멈추는 상황)이나 레이스 컨디션(경쟁 상태)이 발생하는 것이다.
OOP에서 동시성 문제 해결하기 위해
동기화(Synchronization), 락(Lock)과 뮤텍스(Mutex) 등을 사용한다.
동기화는 요리사가 동일한 재료를 동시에 처리하지 않도록, 일정한 순서를 정해 작업하게 만드는 것이다.
락과 뮤텍스는 주방에서 한 요리사가 특정 도구나 재료를 사용할 때 다른 요리사가 그 도구를 사용할 수 없게 잠그는 것이다.
'컴공지식 > 프로그래밍언어론' 카테고리의 다른 글
문법(Syntax)에 대하여 (0) 2024.09.07 프로그래밍 언어의 구성 (0) 2024.09.07 프로그래밍 패러다임 (0) 2024.09.02 테스트 주도 개발(TDD, Test-Driven Development) (0) 2024.08.31 어떻게 함수를 설계할까 (0) 2024.08.31