Q1. 병렬 프로그래밍에 대해 설명해주세요.
멀티 코어, 멀티 스레드 cpu 시대가 오면서, 병렬 프로그래밍이 가능해졌습니다. 하나의 프로그램을 동작하는 프로세스에서 멀티 스레드를 활용하여 여러 동작을 병렬적으로 처리하는 프로그래밍을 병렬 프로그래밍이라고 합니다.
싱글 스레드만을 사용하는 경우, 하나의 작업을 처리하고 다음 작업을 순차적으로 밖에 처리 할 수 없어 전체 작업 처리 속도가 느립니다. 하지만, 멀티 스레드의 경우 작업을 작은 여러개의 단위로 나누어 병렬적으로 실행하므로 처리 속도가 빨라집니다.
하지만 병렬 프로그래밍은 어렵습니다. 멀티 코어 환경에서는 cpu의 스케줄링을 완벽하게 재현하기 어렵기 때문에 버그가 발생했을 때 재현이 매우 어렵습니다. 이런 대표적인 버그로 데이터 레이스(data race)를 들 수 있습니다. 어떤 데이터가 여러 스레드에 의해 동시에 접근되는데, 그 중 하나 이상이 쓰기일 때 그러한 상황을 말합니다. 또, 효율적으로 최적 성능을 발휘하도록 설계하는 것도 매우 어렵습니다. 프로그래머가 동적 작업의 양과 시간까지 예측하여 각 스레드에 알맞은 양의 작업을 분배하는 것이 간단하지 않기 때문입니다.
이 외에도 병렬 프로그래밍이 어려운 이유는 여러가지가 있지만, 여기서는 언급하지 않도록 하겠습니다.
클라우드 컴퓨팅이 대세가 된 요즘은 병렬 프로그래밍을 통해 하나의 서버의 자원을 최대한 이용하는 방법보다는 저사양의 클라우드 서버를 여러대 구성하여 트래픽을 받아내는 방식으로 많이 이동했습니다.
저수준 언어를 사용하여 복잡한 병렬 프로그래밍을 하는 엔지니어의 임금을 감당하는 것보다, 고수준 언어의 개발자를 고용하여 여러대의 클라우드 서버 비용을 감당하는 것이 훨씬 저렴하기 때문입니다.
하지만, 여전히 고성능 컴퓨팅, 데이터베이스, 그래픽 처리 등 많은 분야에서 사용되고 있습니다.
[병렬프로그래밍] 자바 병렬 프로그래밍 소개
자바에서 제공하는 저수준의 도구와 설계 수준의 정책 간 차이점을 극복할 수 있도록 병렬 프로그램을 작성하는데 필요한 간결한 규칙이 필요합니다. 자바 메모리 모델의 깊숙한 부분까지 이해
12bme.tistory.com
병렬 프로그래밍 개념
자바, C#, 루비와 같은 높은 수준의 언어는 하드웨어의 복잡함을 감춤으로써 더 쉬운 프로그래밍 환경을 ...
blog.naver.com
CPU, GPU를 활용한 병렬 프로그래밍의 이해
병렬 프로그래밍 튜토리얼 CPU, GPU를 활용한 병렬 프로그래밍의 이해 처리할 데이터는 점차 많아지고 암호화 빈도는 더욱 높아지며 애플리케이션에게 더욱 많은 연산량을 요구하고 있는 것이 데
dataonair.or.kr
'항해99_10기 > 105일의 TIL & WIL' 카테고리의 다른 글
[기술면접 스터디] [230302] 다형성, 관계형 vs NoSQL (0) | 2023.03.02 |
---|---|
[기술면접 스터디] [230301] 프로그래밍 패러다임, 시간복잡도 & 공간복잡도 (0) | 2023.03.02 |
[기술면접 스터디] [230228] WS & WAS, 자료구조 (stack, queue, array, linked list) (0) | 2023.03.02 |
[기술면접 스터디] [230227] 트랜잭션, TCP & UDP (0) | 2023.02.27 |
[기술면접 스터디] [230224] parameter vs argument, process vs thread (0) | 2023.02.24 |