Concurrent, Parallel 은 대부분 서로 동의어로 쓰임… 컴퓨터 과학 분야에서 조차도! 그래서 바로 이 부분이 많은 혼란을 낳는 지점.

동시성

  • 여러 작업을 시작, 실행, 완료하는 과정이 서로 중첩된 시간에서 특별히 정해진 순서 없이 일어나는 것 말함

병렬성

  • 여러 작업을 여러 컴퓨팅 자원을 이용해서 병렬로 동시에 실행하는 것
  • 작업을 물리적으로 동시에 실행
  • 처리 자원을 여러 개 갖춘 하드웨어 필요
  • 하드웨어 계층의 개념
  • 병렬성은 구현의 속성(implementation property)
  • 병렬성은 동시성의 일종

요약

  • 동시 계산은 결과의 정확도를 해치지 않는 선에서 병렬화할 수 있지만, 동시성 그 자체는 병렬성을 담보하지 않음!
  • 병렬성 역시 그 자체로는 동시성 담보 않음
    • 파이프라이닝 처리 기법 등으로 의미론적 동시성이 없는 프로그램을 여러개 병렬 구성요소루 분해하는 방법 채택한 최적화 기법
      • 단일 명령-다중 데이터(SIMD)연산
      • divide and conquer
  • Go 창시자 왈
    • “동시성은 여러가지를 한 번에 다루는 것이지만, 병렬성은 여러 가지 일을 동시에 하는 것”
  • 병렬성은 프로그램 동작 실행 환경에 영향 크게 받음. 싱글 코어에서는 동시성은 가능해도 병렬성은 불가

이해를 하려면 다음을 주목해보자

  • 애플리케이션은 동시적이지만 병렬적이지 않을 수 있다.
    • 일정 시간 동안 두 가지 이상의 일(동시에 하지 않더라도 두 가지 일을 번갈아가며 할 수 있다) 처리함
  • 애플리케이션은 병렬적이지만 동시적이지 않을 수 있다
    • 단일 작업의 하위 작업 여러 개를 동시에 처리하는 경우
  • 애플리케이션은 병력적이지도 도잇적이지도 않을 수 있다
    • 한 번에 한 가지 작업을 순차적으로 처리하며, 이 작업을 구성하는 하위 작업이 없을때
  • 병렬적이면서 동시적일 수 있다.
    • 여러 개의 작업을, 또는 단일 작업의 하위 작업 여러 개를 동시에(그래고 병렬로 실행)처리 시 해당

동시성은 프로그램이 작성된 프로그래밍 언어와 프로그램 설계가 결정

병렬성은 프로그램의 실제 실행 환경이 결정