행궁동 데이터 엔지니어

반응형

동시성과 병렬성에 대해 간단히 정리해봤습니다.

아래 링크된 Smart Tiger님 블로그의 자료를 많이 참고했음을 밝힙니다.
https://seamless.tistory.com/42

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

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과

seamless.tistory.com

동시성, 병렬성 참고 그림

출처 : https://www.slideshare.net/RubyMeditation/concurrency-in-production-real-life-example-dmytro-herasymuk-ruby-meditation-25
  • 위에 그림 처럼 동시성(Concurrency)은 2가지 작업(파란색, 빨간색)을 번갈아가며 실행하는 것이고 병렬성(Paralleleism)은 2가지 작업을 각 각 실행하는 것
  • 동시성은 작업이 빠르게 번갈아가며 실행되기에 동시에 실행되는 것 같이 보이는 것이고, 병렬성은 실제로 동시에 작업을 처리하는 것

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

동시성(Concurrency) 병렬성(Paralleism)
동시에 실행되는 것 같이 보이는 것 실제로 동시에 여러 작업이 처리되는 것
싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식
한번에 많은 것을 처리 한번에 많은 일을 처리
논리적인 개념 물리적인 개념
  • 병렬성이 멀티 코어 + 멀티 스레드 작업이라 항상 더 좋을 것 같지만, 동시성으로 접근하는게 좋은 경우도 있음
  • ex. 네트워크 통신, 파일 저장 및 로드 등의 I/O 작업은 CPU가 거의 일을 하지 않고 요청 후 응답이 올 때까지 대기상태에 있게됨. 이때 한 개의 CPU가 I/O 요청 후 기다리는 동안 다른 작업을 처리하도록 하면 효율적
  • 물론 병렬작업으로 여러 CPU가 동시에 다수 I/O 작업을 실행하게 할 수 있으나, 물리적인 CPU의 경우 개수 제한이 있기 때문에 동시성으로 접근하는 것이 좋음
  • 동시성과 병렬성을 혼용해서 처리하는 경우도 있음
  • 동시성은 작업이 바뀔 때 문맥 교환(Context Switching)이 발생하고, 동시 작업이 너무 많다면 문맥 교환의 오버헤드로 인해 싱글 코어에서 싱글 스레드로 작업하는 것이 더 빠를 수 있음
  • 코어가 N배로 늘어나더라고 성능이 N배로 늘어나는 것은 아님(암달의 법칙) : 프로그램의 모든 부분을 Parallel 하게 작성할 수 없고 반드시 Sequential하게 동작해야 하는 부분들이 존재


혹시 궁금하신 사항은 댓글 남겨주세요.

감사합니다.

참고자료

1. Smart Tiger님 블로그, [동시성 Vs 병렬성], https://seamless.tistory.com/42
2. babjo님 블로그, [동시성과 병렬성], https://medium.com/@chanhyeonglee/%EB%8F%99%EC%8B%9C%EC%84%B1%EA%B3%BC-%EB%B3%91%EB%A0%AC%EC%84%B1-4601e2fa5cff
3. Sammy Baek님 블로그, [동시성 vs 병렬성 처리], https://seungwubaek.github.io/computing/computer/cpu/concurrency_vs_parallelism/
4. 규동 프로그래밍, [OS] 멀티스레드 개념 (동시성 VS 병렬성), https://bubble-dev.tistory.com/entry/OS-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EA%B0%9C%EB%85%90-%EB%8F%99%EC%8B%9C%EC%84%B1-vs-%EB%B3%91%EB%A0%AC%EC%84%B1

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band