프로세서 (Processor)
코어 (Core)
프로그램(Program)과 프로세스(Process)
프로그램은 일반적으로 보조기억 장치에 저장된 실행코드 즉, 생명이 없는 상태를 말한다. 프로세스 는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위를 말합니다. 동시에 여러 개의 프로세스를 운용하는 시분할 방식을 멀티태스킹이라고 합니다. 이러한 프로세스 관리는 운영체제에서 담당합니다.
스레드(Thread)
스레드는 하나의 프로세스 내에서 실행되는 작업흐름의 단위를 말합니다. 보통 한 프로세스는 하나의 스레드를 가지고 있지만, 프로세스 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 방식을 멀티스레딩 이라고 합니다. 그리고 프로그램 실행이 시작될 때부터 동작하는 스레드를 메인 스레드 라 하고 그 외에 나중에 생성된 스레드를 서브 스레드 또는 세컨더리 스레드 라고 합니다.
비동기(Asynchronous) 프로그래밍
프로그램의 주 실행 흐름을 멈추어서 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식입니다. 즉, 코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬처리 방식 입니다. 비동기 프로그래밍은 언어 및 프레임워크에서 지원하는 여러 방법으로 구현할 수 있습니다.
→ ex. 특정 함수의 실행 결과 (return 값) 를 따로 기다리지 않고 바로 다음 작업을 실행
동시성(Concurrency) 프로그래밍
논리적인 용어로 동시에 실행되는 것처럼 보이는 것 입니다. 싱글 코어(멀티 코어에서도 가능)에서 멀티스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 개의 스레드가 번갈아 가면서 실행 되는 방식입니다. 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 서로 번갈아 가면서 실행되고 있는 방식입니다.
병렬성(Parallelism) 프로그래밍
물리적으로 동시에 정확히 동시에 실행 되는 것을 말합니다. 멀티 코어에서 멀티 스레드를 동작시키는 방식으로 데이터 병렬성(Data Parallelism)과 작업 병렬성(Task Parallelism)으로 구분됩니다.
동시성(Concurrecny)과 병렬성(Parallelism) 차이
동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기(Asynchronous) 동작을 구현할 수 있지만, 그 동작 원리가 다릅니다. 아래 그림처럼 비유해 볼 수 있습니다.
iOS 환경 동시성 프로그래밍 지원 종류
위 내용은 "https://www.boostcourse.org/mo326/lecture/16866" 을 참고하여 공부한 내용을 정리하였습니다.