Concurrent, Parallel 은 대부분 서로 동의어로 쓰임… 컴퓨터 과학 분야에서 조차도! 그래서 바로 이 부분이 많은 혼란을 낳는 지점.
동시성
- 여러 작업을 시작, 실행, 완료하는 과정이 서로 중첩된 시간에서 특별히 정해진 순서 없이 일어나는 것 말함

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

요약
- 동시 계산은 결과의 정확도를 해치지 않는 선에서 병렬화할 수 있지만, 동시성 그 자체는 병렬성을 담보하지 않음!
- 병렬성 역시 그 자체로는 동시성 담보 않음
- 파이프라이닝 처리 기법 등으로 의미론적 동시성이 없는 프로그램을 여러개 병렬 구성요소루 분해하는 방법 채택한 최적화 기법
- 단일 명령-다중 데이터(SIMD)연산
- divide and conquer
- 파이프라이닝 처리 기법 등으로 의미론적 동시성이 없는 프로그램을 여러개 병렬 구성요소루 분해하는 방법 채택한 최적화 기법
- Go 창시자 왈
- “동시성은 여러가지를 한 번에 다루는 것이지만, 병렬성은 여러 가지 일을 동시에 하는 것”
- 병렬성은 프로그램 동작 실행 환경에 영향 크게 받음. 싱글 코어에서는 동시성은 가능해도 병렬성은 불가
이해를 하려면 다음을 주목해보자
- 애플리케이션은 동시적이지만 병렬적이지 않을 수 있다.
- 일정 시간 동안 두 가지 이상의 일(동시에 하지 않더라도 두 가지 일을 번갈아가며 할 수 있다) 처리함
- 애플리케이션은 병렬적이지만 동시적이지 않을 수 있다
- 단일 작업의 하위 작업 여러 개를 동시에 처리하는 경우
- 애플리케이션은 병력적이지도 도잇적이지도 않을 수 있다
- 한 번에 한 가지 작업을 순차적으로 처리하며, 이 작업을 구성하는 하위 작업이 없을때
- 병렬적이면서 동시적일 수 있다.
- 여러 개의 작업을, 또는 단일 작업의 하위 작업 여러 개를 동시에(그래고 병렬로 실행)처리 시 해당
동시성은 프로그램이 작성된 프로그래밍 언어와 프로그램 설계가 결정
병렬성은 프로그램의 실제 실행 환경이 결정