프로세스(Process), 스레드(Thread), 멀티 스레드(Multi-Thread)

YoungJoon Suh·2022년 4월 19일
0

운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부릅니다. 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행합니다. 이때 실행되는 애플리케이션을 프로세스라고 부릅니다.
한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어놓았다고 해서 유래된 이름입니다.

멀티 스레드(Multi-Thread)
멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 할 수 있습니다.

멀티 스레드의 용도
대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는 데에 사용할 수 있음.
UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수 있음.
여러 클라이언트의 요청을 처리하는 서버를 개발할 때 사용됨.

멀티 스레딩의 장점
메모리 공간과 시스템 자원의 소모가 줄어듬. 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용한다. 따라서 프로세스 간 통신 방법(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단합니다. 시스템의 처리량(Throughput)이 향상되고 자원 소모가 줄어든다. 프로그램의 응답시간이 단축된다. 이런 장점 때문에 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레드로 나눠 수행한다.

멀티 스레딩의 문제점
멀티 프로세스 기반으로 프로그래밍할 때에는 프로세스 간 공유하는 자원이 없습니다. 따라서 동일한 자원에 접근하는 일이 없었지만, 멀티 스레딩을 기반으로 프로그래밍할 때에는 공유하는 자원에 대하여 고민이 필요합니다. 서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있습니다. 그렇기 때문에 멀티스레딩 환경에서는 동기화 작업이 필요합니다. 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 합니다.

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한됩니다. 운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 합니다. 이런 방식을 시분할이라고 합니다.
Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴.
Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨.

Context Switching이란?
다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것을 Context Switching 이라고 한다.

profile
저는 서영준 입니다.

0개의 댓글