JavaScript/DreamCoding

프로세스와 쓰레드

느리지만 꾸준하게 2021. 7. 21. 23:57

프로세스

프로세스는 컴퓨터 위에서(운영체제 위에서) 연속적으로 실행되고 있는 프로그램을 말한다.

사용자들이 음악 재생 프로그램이나 사진을 보는 사진 뷰어프로그램 등등 각각의 프로세스를

가지고 있다.

각각의 프로세스는 메모리 위에서 실행되고 있고 서로 독립적으로 실행된다.

만약에 첫 번째 프로세스에서 문제가 발생하면 그 첫 번째 프로세스만 죽게된다.

 

어떤 어플리케이션을 쓰다가 그 어플리케이션에 문제가 생기면 쓰고있는 어플리케이션만 강제 종료하거나

갑자기 어플리케이션이 죽어 버리는 경우, 그런 경우는 이 프로세스에 문제가 생겨서 프로세스가 죽었다

라고도 말할 수 있다.

 

그래서 프로세스는 운영체제 위에서 독립적으로 메모리에서 실행되고 있는 프로그램을 말한다.

그리고 각각의 프로세스는 자기만의 리소스 자원들이 정해져 있는데, 프로세스 마다 할당된 메모리나 데이터들이

지정되어져 있다.

 

그리고 프로세스 안에는 프로그램을 위해서 작성된 코드 즉 프로그램을 실행하기 위한 코드가 들어 있는데

그 코드와 프로세스 안에서 함수들이 어떤 순서로 실행되어야 하는지 함수가 끝나면 어디로 다시 돌아가야 되는지에 대한 정보를 저장하고 있는 스택이 들어있다.

 

그리고 힙은 사용자가 오브젝트를 생성하거나 데이터를 만들 때 그 데이터들이 저장되는 공간이다.

힙에는 동적으로 할당된 변수들이 저장되는 반면에 데이터에는 전역 변수나 static 변수들이 할당되어진다.

그래서 각각의 프로세스는 자기들에게 필요한 코드 그리고 동작하고 있는 순서를 기억하는 스택 데이터들이 들어있는

힙과 데이터 같은 것들이 들어져 있다.

 

쓰레드는

한 프로세스 안에서 여러 개가 동작할 수 있는데, 저마다 하는 업무를 배정 받는다. 저마다 필요한 일들을 수행하게 되고고, 이 쓰레드는 자기들만의 수행해야 되는 함수의 호출을 기억해야 되기 때문에 쓰레드마다 스택이 할당되어져 있다.

프로세스 안에서 동작하는 이 쓰레드는 한 프로그램을 위해서 일해야 하므로 프로세스에 지정된 콛와 데이터 힙들을 공통적으로 접근해서 공통적으로 업데이트가 가능.

 

즉, 프로그램내에서 음악 듣고 사진 편집하고 어플리케이션 있으면 음악을 재생하는 쓰레드와 사진을 편집할 수 있는 쓰레드 그리고 다른 쓰레드에서는 이 음악의 데이터를 서버에서부터 받아와서 처리하는 이런 일들을 각각 저마다 할 수 있다. 이 쓰레드는 동시에 발생할 수 있어서 프로세스가 조금 더 효율적으로 일을 할 수 있도록 도움을 준다.

쓰레드들이 안에 들어 있어서 다양한 일들을 동시에 할 수 있다.

 

쓰레드는 자신들이 일을 수행할 때 어디에서부터 어디까지 일을 했고 다음엔 어디에서 일을해야하는지 이런 일에 흐름을 기억할 수 있는 고유의 스택이 지정되어져 데이터나 코드나 힙 같은 공통적인 데이터 리소스는 프로세스에 있기 때문에 쓰레드들은 프로세스에 공통적으로 할당된 리소스에 동시다발적으로 접속해 업데이트 해야돼서 서로 공유하면서 사용한다.

 

그래서 멀티쓰레딩을 잘못하면 공통적으로 업데이트하면서 순서가 맞지 않으면 발생할 수 있는 문제가 조금 있다.

그러므로 멀티쓰레딩 프로그래밍은 조금 까다롭다

 

결론적으로 프로세스는 프로그래밍을 동작하는 최고의 단위이고, 쓰레드는 프로그램안에서 동시에 여러 개가 수행될 수 있는 SCV 역할이라고 할 수 있다