병렬성과 동시성의 차이점을 알려주세요
- 0012 Career 💼
- 병렬성(Parallelism): 여러개의 실행흐름이 실제로 동시에 실행되는 것을 병렬성이라고 합니다.
- 동시성(Concurrency): 여러개의 실행흐름이 스케줄링이 되어 마치 동시에 실행되는 것처럼 보이는 것을 의미합니다.
동시성을 제어하는 여러 방법 중 어떤 것들이 있나요?#
- 실행흐름을 제어하는 관점에서 context switching 방법, 나온 이유, 스케줄링 알고리즘, 선점형과 비선점형 스케줄링
크게 선점형 방식과 비선점형 방식이 있습니다. 제일 먼저 비선점형 방식으로는 LIFO방식이 있고 선점형 방식으로는 라운드 로빈이 있습니다.
- 실행순서를 제어하는 관점에서
자원획득의 동시성을 제어하는 방법으로는 상호배제를 뜻하는 mutex와 세마포어가 존재합니다. 세마포어는 down과 up 인터페이스를 통하여 동시성을 제어합니다. 양의 정수로 초기화해 0이 될때까지 스레드를 통과시키고, 0이면 스레드를 블락하고 대기리스트에 등록합니다. mutex는 이진 세마포어를 의미합니다.
race condition이란 무엇이며, 어떻게 방지할 수 있을까요?#
둘 이상의 프로세스나 스레드가 공유된 자원에 동시에 접근하려고 할 때 발생하는 상황을 의미합니다. 원자적이지 않은 연산의 경우 선점형 방식에선 얼마든지 실행흐름이 교체될 수 있기 때문에 공유자원의 중간계산 결과가 유효하지 않게 될 수 있습니다.
데드락(deadlock)에 대해 설명해주세요.#
데드락은 둘 이상의 프로세스가 둘 이상의 공유된 자원에 접근할때 발생할 수 있는 문제입니다. Thread A가 Resource A를 획득하고 Thread B가 Resource B를 획득한 상황에서 Thread A가 Resource B를 기다리고 동시에 Thread B가 Resource A를 기다리면 서로 영원히 기다리는 상태가 되는데, 이것이 데드락입니다.