본문으로 바로가기

동시성(Concurrency)


  • 논리적인 용어
  • 동시에 실행되는 것처럼 보이는 것
  • 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식
    • 하지만 멀티 코어에서도 동시성은 사용 가능함
    • 코어 수에 따른 방식보다는 작업 방식에 대한 부분인데 굳이 이해하기 좋고 좁게 보자면 이렇게 이해할 수 있을꺼 같음
  • 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질
  • 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가면서 조금씩 실행되고 있는 것



병렬성(Parallelism)


  • 물리적인 용어

  • 실제로 작업이 동시에 처리되는 것

  • 멀티 코어에서 멀티 스레드를 동작시키는 방식
  • 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질
  • 병렬성은 데이터 병렬성(Data parallelism)과 작업 병렬성(Task parallelism)으로 구분


데이터 병렬성

  • 같은 작업을 병렬 처리하는 것
  • 전체 데이터를 나누어 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리하여 작업을 빠르게 수행하는 것
  • 자바 8에서 지원하는 병렬 스트림이 데이터 병렬성을 구현한 것
  • 서브 데이터는 멀티 코어의 수만큼 쪼개어 각각의 데이터들을 분리된 스레드에서 병렬 처리함

 

작업 병렬성

  • 서로 다른 작업을 병렬 처리하는 것
  • Example) 웹 서버 (각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리함)




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



Concurrency in golang



이미지 출처 (http://www.javaworld.com/article/2076774/java-concurrency/programming-java-threads-in-the-real-world--part-1.html)


사실 동시성과 병렬성을 단순한 설명으로만 들으면 잘 이해가 되지 않는다. 비슷한 말 같은데 무슨 차이가 있는지 말이다.

위의 정리해놓은 글을 보면 간단해보이는데 잘 이해가 되지 않는다면 아래 표를 통해 다시 정리하고 이해해보면 좋을꺼같다.


 

 동시성(Concurrency)

 병렬성(Parallelism)

 용어 차이

 논리적

 물리적

 뜻

 동시에 실행되는 것처럼 보이는 것

 실제로 작업이 동시에 처리되는 것

 코어 환경

 싱글 코어, 멀티 코어에서 가능

 멀티 코어에서만 가능






Reference

[1] 동시성과 병렬성 (http://sunphiz.me/wp/archives/1716)

[2] 동시성과 병렬성 (http://yolojeb.tistory.com/10)


저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

티스토리 툴바