[동시성 프로그래밍 가이드] 0. Process, Thread

Wody·2023년 3월 19일
0

공식문서

동시성이란?
동시성은 동시에 여러 일이 일어난다는 뜻이다.

공식문서에 나온 프로세스, 스레드에 대한 지식을 정리.

CPU는 명령어를 실행하는 부품이다.
그리고 CPU의 구성 중 실제로 명령어를 실행하는 부분은 '코어'라고 부른다.
오늘날 CPU는 성능을 높이기 위해 코어의 클럭을 높이기보다 코어의 갯수를 늘리는 '멀티코어' 방향으로 발전했다.

단 멀티코어의 경우 코어의 갯수가 늘어난 만큼 비례하여 성능이 늘어나진 않는다. 코어 별 처리 할 작업이 적절히 분배되지 않는다면 의미가 없다.

프로세스(Process)

프로세스는 운영체제(OS)가 관리하는 단위다.
어떤걸 관리하는가? -> 프로그램을
프로그램은 뭘 하는가? -> 연산의 흐름(thread)

++
프로세스가 여러 개 동작한다면 multi-tasking
프로세스 내 연산의 흐름이 여러 개 동작한다면 multi-threading

프로세스를 통해 관리되는 것
CPU의 명령어
메모리 관리 (가상 메모리)

프로세스는 최소 1개의 Thread가 존재한다.
OS는 제한된 공간인 가상 메모리를 프로세스에게 준다.
따라서 프로세스에 속한 모든 Thread는 프로세스의 가상 메모리 공간에 제약된다.

스레드(Thread)

스레드의 사전적인 의미는 실행 흐름의 단위 다. 그리고 스레드라는 용어는 CPU에서 사용하는 의미와 프로그래밍에서 사용하는 의미가 다르다.

하드웨어적 스레드와 소프트웨어적 스레드

하드웨어적 스레드

하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어 단위를 의미한다.

소프트웨어적 스레드

소프트웨어적 스레드는 하나의 프로그램에서 독립적으로 실행되는 단위를 의미한다.
프로그램에서 독립적으로 실행되는 단위의 예시
1. 사용자가 실행하고 있는 앱의 UI를 화면에 보여줌
2. 사용자가 로그인을 위해 비밀번호를 입력하고 비밀번호 규칙이 맞는지 검사함
3. 사용자가 입력한 로그인 정보를 서버에게 전달해 로그인을 시도함

스레드가 사용하는 메모리는?
스레드별 사용하는 메모리는 따로 사용하게 되는데 통상 Thread Local Storage를 갖는데 이걸 Stack Memory라고도 한다. (개별공간)
개별 공간이기 때문에 메모리 크기에 대한 제한이 존재한다.

그리고 프로세스 안에 쓰레드가 공통적으로 사용하는 메모리는 Heap Memory라고 한다. (공통공간)
런타임 중 결정되며 원래는 프로그래머가 메모리의 할당/해제를 관리해야 하나 iOS는 ARC에 의해 자동으로 관리된다.

++
iOS의 메모리 구조에 대해선 따로 자세히 알아보겠지만 스택과 힙 메모리는 같은 공간을 사용한다 (OS가 프로세스에게 부여하는 가상 메모리 공간)

특이사항

한 번에 하나의 명령어를 처리하는 1코어 1스레드 CPU도 소프트웨어적 스레드를 수십 개 실행할 수 있다. (1코어 1스레드의 CPU로도 운영체제가 돌아갔고, 그 안에서 프로그램이 동작한다.)

0개의 댓글