프로그램, 프로세스, 쓰레드에 대한 이해가 항상 부족했다. 머리속으로 그냥 암기하고 있는 개념들이 전부였는데, 운영체제에서 중요하게 다루고 있고, 프로그래밍을 공부하는 입장에서 전반적인 프로그램 구조와 운영체제를 제대로 이해하기 위해서 정리하고자 한다.
프로그램의 의미는 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 것으로 쉽게말해 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 '정적인 상태'의 파일이라고 볼 수 있다.
ex. Windows의 경우 exe파일
컴퓨터에서의 '프로그램'은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합이다. 그에 필요한 데이터를 묶어 놓은 파일로 보조 기억장치에 저장되어있다.
프로그램이 실행되서 돌아가고 있는 상태, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 컴퓨터 프로그램이다.
ex. ctrl + alt + delete의 작업관리창에 표시되어있는 것들이 동적인 상태의 프로그램.
즉, 프로세스인 것이다.
프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 '실행중인 프로그램'이다.
프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 '프로세스'가 되는 것이다.
옛날엔 컴퓨터가 한번에 하나의 동작밖에 수행하지 못했다. 하지만 다중작업을 가능하게하는 멀티태스킹 기능이 나오면서 컴퓨터가 프로세스 여러개를 함께 돌리는 것이 가능해졌다.
여기까진 컴퓨터에서 여러 프로세스를 함께 돌릴 수 있게 된 것에 대한 설명이다.
브라우저 또한 하나의 프로그램이고 브라우저가 돌면서 하나의 프로세스가 진행되게 된다.
하지만 브라우저가 실행중일때도 게임을 다운받고, 웹서핑을하거나 노래를 듣는 등,
한 프로세스안에서도 여러가지의 작업들이 동시에 진행되는 경우가 생긴다.
이런 여러가지 작업으로 생기는 이 갈래들을 쓰레드(Thread)라고 부른다.
쓰레드는 프로세스가 할당 받은 자원을 이용하는 실행 단위이자, 프로세스의 특정한 수행 경로이자 프로세스 내에서 실행되는 여러 흐름의 단위이다.
쓰레드는 프로세스 내에서 프로세스의 자원을 이용해서 실제로 작업을 수행하는 일꾼이다.
쓰레드가 소속된 프로세스가 운영체제로부터 자원을 할당받으면 그 자원을 쓰레드가 사용한다.
프로세스는 최소 한 개 이상의 쓰레드를 가지며, 이 스레드를 메인 쓰레드라고 한다.
프로세스는 쓰레드의 컨테이너이다. 쓰레드의 정보를 담고 있는 것에 불과하다!
프로세스는 각 작업마다 운영체제로부터 자원을 할당받기 위해 시스템 콜을 하는 부담이 생기지만, 멀티 스레드를 사용한다면 시스템 콜을 한번만 더 해도 되기때문에 효율적이다.
멀티 프로세싱이란?
하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
멀티 프로세싱의 장점
여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
멀티 프로세싱의 단점
멀티 스레딩이란
하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다.
멀티 스레딩의 장점
✔️ 자원의 효율성 증대
멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
✔️ 처리 비용 감소 및 응답 시간 단축
또한 프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.
스레드는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다. Context Switching시 스레드는 Stack 영역만 처리하기 때문이다.