코딩 지식

[코딩 지식] Process 와 Thread

코딩하는경준 2022. 4. 29. 19:41

프로세스

프로그램(ex. Chrome, KaKaoTalk, IntelliJ, Slack 등등.. )이 동작을하면 프로세스가 되어 메모리에 올라가서 실행이 됩니다.

이때 OS 혹은 다른 프로그램에서 프로세스가 한개가 아닌 여러개가 실행되는 것을 볼 수 있는데 여러개가 동시에 실행이 된다고해서 정말 동시에 실행이 되는것이 아닙니다.

동시성

동시성은 사실 동시에 일어나는 작업이 아닌, 컨텍스트 스위칭 이라는 작업을 통해서 빠르게 한 프로세스 씩 수행하는 방법입니다.

동시에 실행하고 싶은 프로세스 두개가 있습니다.

프로세스 1 이 CPU 로 올라갑니다.

프로세스 1은 준비상태로 내려가고 프로세스 2가 다시 CPU 로 올라갑니다.

프로세스 1은 CPU로 올라가고 프로세스 2가 준비 상태로 내려갑니다.

이 과정을 컨텍스트 스위칭 이라 부릅니다.

작업이 너무 빠르게 진행되다보니 동시에 일어나는 것 처럼보여서 동시성 이라고 합니다.

 

 

프로세스와 스레드

운영체제에서는 여러개의 프로세스가 돌아가는데 그 안에서 또 실행되는 작업들은 스레드라 부릅니다.

예를들어 IntelliJ 를 켜서 코딩을 함을 동시에 크롬에는 유튜브 플레이리스트와 구글링을 동시에 한다고 가정했을때

 

프로세스 A = IntellJ

프로세스 A 의 스레드 1 = 코드 실행

프로세스 A 의 스레드 2 = 코드를 작성하는 작업

프로세스 B = Chrome

프로세스 B 의 스레드 1 = 유튜브

프로세스 B 의 스레드 2 = 구글링을 하는 작업

 

이라고 볼 수 있습니다.

 

멀티 프로세스와 멀티 스레드

멀티 프로세스와 멀티스레드는 처리 방식의 일종입니다.

 

예시를 들자면 다음과 같습니다.

 

다들 Chrome, Internet Exprlor 써보신적 있으시죠??

Chrome 은 멀티 프로세스 방식으로 한 탭에 문제가 생겨도 다른 탭에 영향이 가지 않는 특징이 있습니다.

반면 Internet Exprlor 는 멀티 스레드 방식으로 한 탭에 문제가 생기면 다른 탭이 모두 꺼져버리는 특징이 있습니다.

( 중학교때 과제하느라 창을 엄청 많이 켜뒀는데 오른쪽 화면처럼 경고창이 뜨면서 다 꺼졌었던 기억이 있네요.. )

 

다음에는 자바를 이용하여 제가 최근 프로젝트를 하면서 겪었던 스레드와 동시성 문제에 대해 다뤄보도록 하겠습니다.

 

Reference

- https://www.youtube.com/watch?v=1grtWKqTn50&t=631s

- https://www.youtube.com/watch?v=iks_Xb9DtTM

- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html