Process와 Thread
업데이트:
프로세스란?
정적 상태였던 프로그램을 실행하게되면 컴퓨터 메모리에 올라가며 동적인 상태가 되며, 이 상태의 프로그램을 프로세스라고 한다.
- 프로그램 : 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일이다.(윈도우 경우 .exe파일)
현재 컴퓨터에선 운영체제가 여러개의 프로세스를 함께 실행해서 동시적
, 병렬적
, 혼합형으로 작업이 이루어진다.
동시적 : 프로세서 하나가 여러 작업을 일부분씩 번갈아가며 진행한다.
사용자는 프로세스들이 동시에 진행되는 것처럼 느낀다.
프로세스를 교체하는 것을 Context switching이라고 부른다.
병렬적 : 프로세서 하나에 여러개의 코어가 있어서 코어들이 각각 동시에 작업을 수행하는 것이다.
- 프로세서 : 프로세스가 동작될 수 있도록 하는 하드웨어(CPU)이다.
프로세스 구조
Stack : 호출된 함수, 지역변수 등 임시 데이터
Heap : 동적으로 생긴 데이터. EX) new Object(), malloc()
Data : 전역변수. EX) static 변수, global 변수
Code : 프로그램의 코드
컴퓨터는 프로세스마다 자원을 분할해서 할당한다.
멀티 프로세스의 단점
- 프로세스가 하나 이상일 경우 하나의 프로세스가 진행되는 동안 모든 영역이 코어에 로딩이 된다.
다른 프로세스가 진행이 되려면 앞서 로딩된 영역을 내리고, 새로운 프로세스의 영역을 코어에 로딩시켜야된다.
Context switching시 시간이 많이 소요된다. - 같은 작업을 하기 위해 만들어진 프로세스더라도 각각 영역을 따로 가지고 있어서 다른 프로세스에 접근하기 위해서 통신이 필요하다.
스레드란?
멀티 프로세스의 단점을 보완하기 위해 스레드가 탄생한다.
스레드는 프로세스 내에서 실행되는 작업 흐름의 단위이다.
스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.
스레드들은 Code, Data, Heap 영역을 공유하고 각 스레드별로 Stack영역이 따로 존재한다.
멀티 스레드
프로세스가 실행되면 Code, data, heap 영역이 코어에 로딩되고, 스레드가 변경될 때 Stack영역만 변경된다.
Context Switching시 시간이 적게 소요된다.
스레드가 전체 자원을 함께 공유하면 속도와 효율이 좋아지는 장점이 있지만, 프로세스 안에 공유되는 변수에 여러 스레드가 동시에 접근한다면 에러가 발생하는 단점이 있다.
멀티 스레드의 단점
- 디버깅이 까다롭다.
- 한 프로세스안의 스레드에 문제가 생기면, 같은 프로세스안의 다른 스레드도 같이 문제가 생긴다.
- 같은 데이터를 공유하기 때문에 데이터 동기화를 신경 써야된다.
공유하기
Twitter Google+ LinkedIn
댓글남기기