프로세스(Process)와 쓰레드(Thread)

leejm·2022년 12월 11일
0

프로세스? 쓰레드?

프로세스(Process)란 컴퓨터에서 실행되고 있는 프로그램의 인스턴스화된 것을 의미하며 CPU 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같의 의미로 쓰인다.
다른 표현으로 운영체제로부터 자원을 할당받는 작업의 단위라고 설명할 수 있다.

ex)
프로그램 - Chrome
프로세스 - Chrome을 더블클릭했을 때 실행되는 단위

쓰레드(Thread)란 프로세스 내 작업의 흐름을 지칭한다.
다른 표현으로 프로세스가 할당받은 자원을 이용하는 실행의 단위라고 설명할 수 있다.

차이에 대해 묻는 이유?

근본적으로 두 차이에 대한 질문은 운영체제가 시스템의 자원을 어떤 단위로 할당하는지, 프로세스와 쓰레드는 이 자원을 어떻게 사용하는지에 대해 질문하는 것.

멀티 쓰레드

멀티 쓰레드의 장점?

멀티 프로세스로 실행하는 작업을 멀티 쓰레드로 실행하는 이유는
1. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있기 때문이다.
2. 프로세스 간의 통신보다 쓰레드 간의 통신 비용이 적으므로 작업들 간의 통신 부담이 줄게 된다.

멀티 쓰레드의 단점?

쓰레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경을 써야하므로 프로그래머의 주의가 필요핟.

IPC

IPC(Inter Process Communication) 이란 프로세스 간, 데이터를 주고 받고 공유 데이터를 관리하는 매커니즘을 뜻한다.
종류로는 공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지 큐 등이 있고 이들은 모두 메모리가 완전히 공유되는 쓰레드에 비해 속도가 떨어진다.

공유 메모리

여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것이다.
기본적으로는 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만 공유 메모리를 통해서는 여러 프로세스가 하나의 메모리를 공유할 수 있다. 어떠한 매개체를 통한 것이 아니라 메모리 자체를 공유하기 때문에 불필요한 데이터 복사 오버헤드가 발생하지 않아 가장 빠르다. 단, 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요하다.

파일

디스크에 저장된 데이터 또는 파일 서버에서 제공된 데이터(파일)을 통해 프로세스 간 통신을 한다.

소켓

동일한 컴퓨터의 다른 프로세스 혹은 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터로 TCP, UDP가 있다.

익명 파이프

익명 파이프(Unamed Pipe)는 프로세스 간 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받으며 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어 작동한다.
이는 부모, 자식 프로세스 간에만 사용할 수 있으며,

명명된 파이프

명명된 파이프(Named Pipe)는 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위해 명명된 단방향 or 이중 파이프를 말한다. 보통 서버용과 클라이언트용 파이프로 구분하여 작동하며 하나의 인스턴스 또는 여러 인스턴스를 기반으로 통신한다.

메시지 큐

메시지 큐는 메시지를 큐(queue) 구조로 관리하는 것을 의미한다. 커널에서 전역적으로 관리되며 다른 IPC 방식에 비해서 사용 방법이 매우 직관적이고 간단하며 다른 코드 수정 없이 몇 줄의 코드 추가만으로 간단히 접근할 수 있는 장점이 있다.

profile
Python Based Backend Engineer입니다. DevOps와 효율적으로 일하는 것에 관심이 있습니다.

0개의 댓글