[OS] 프로세스 vs 쓰레드

post-thumbnail

❗ 유투버 얄코님의 영상을 참고했다!

오늘 인턴쉽 오전 강의에서 프로세스와 쓰레드의 차이점을 아는 학생이 있냐고 물어보셨는데, 나는 몰랐기 때문에 대답을 하지 못했다.. 그런의미에서 차이점을 간단히 정리해본다.

1. 프로세스(Process)

컴퓨터내에서 프로그램이 돌아가고 있는 상태. 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다. 운영체제가 여러개의 프로세스를 동시에 돌리고 있기 때문에 편하게 컴퓨터를 이용하고 있는 것이다!

(1) 프로세스의 동시성

여러개의 프로그램을 동시에 돌리는 것이 아니라, 여러 프로그램을 번갈아가면서 하나씩 돌리는 것이다. 즉, 진행중인 프로그램을 계속해서 바꾸는것이다. 이 과정을 Context Switching이라고 한다. context switching이 빠르게 진행되기 때문에 마치 여러 프로그램이 동시에 돌아가는걸로 느껴진다.

(2) 프로세스의 병렬성

프로세서 하나에 여러개의 코어가 존재해서, 여러 프로그램을 동시에 돌리는 것이다. 따라서 멀티코어 프로세서를 가지고 있는 컴퓨터에서 가능한 일이다.

멀티코어 프로세서가 생긴 이유는, CPU 발열 등의 이유로 CPU의 속도를 무제한 늘릴 수 없기 때문에 코어의 수를 늘려서 작업을 분담할 수 있게 하기 위해서이다.



2. 쓰레드(Thread)

크롬, firefox같은 브라우저도 하나의 프로그램이다. 따라서 브라우저 하나가 돌아갈 때 하나의 프로세스가 돌고 있는것이다. 예를 들어서 크롬에서 특정 프로그램을 다운 받는중에도 기다리는 동안 유투브를 볼 수 있어야 한다. 즉, 한 프로세스에도 여러갈래의 작업들이 동시에 진행될 수 있어야 한다는 말이다. 이때 갈래를 쓰레드라고 부른다.



3. 프로세스와 쓰레드의 차이

ProcessThread
프로세스는 컴퓨터의 자원을 분할해서 사용쓰레드는 프로세스마다 주어진 자원 전체를 함께 사용

위와같이 한 프로세스에는 여러개의 쓰레드가 존재하고, 여러개의 쓰레드는 한 프로세스에 주어진 자원을 함께 공유해서 쓰기 때문에 에러가 발생한다는 단점이 있다. 이러한 문제를 해결하기 위해, 다양한 도구와 프로그래밍 방식이 존재한다. 예로 함수형 프로그래밍 방식을 들 수 있다.

(1) 자바에서의 쓰레드

한 프로세스 내의 여러개의 쓰레드로 인한 오류를 방지하기 위해 자바에는 synchronized를 이용할 수 있다. 관련 메소드로 sleep이 있는데 이는, 해당 스레드를 일정 시간동안 정지시킨다.

0개의 댓글