티스토리 뷰

Linux

프로세스(Process)와 쓰레드(Thread)

Andrew Shin 2015. 5. 9. 11:25

프로세스(Process)란?

실행중인 프로그램이라는 뜻으로 프로그램 또는 그 일부를 뜻하기도 하고, 데이터의 입력이나 출력등을 조작하거나 처리하는 것을 말하기도 한다.

부모 프로세스(parent process)라는 상위계층과 자식 프로세스(child process)라는 하위계층이 존재한다. 부모 프로세스는 프로그램이나 명령에 의해 시작되며 자식 프로세스는 부모 프로세스에 의해 만들어지는 것을 말한다.

하나의 부모 프로세스는 여러개의 자식프로세스를 관리하는데, 여러개의 자식 프로세스가 하나의 CPU에서 동시에 처리되는 것처럼 보이는 것을 멀티 태스킹(multitasking)이라고 한다.


쓰레드(Thread)란?

프로세스의 장점을 지니면서도 어느정도 단점을 극복한 '경량화된 프로세스'이다. 말 그대로 프로세스보다는 여러가지 면에 있어서 훨씬 가볍다고 할 수 있다.

따라서 쓰레드를 가지고도 프로세스가 하는 일을 해낼 수 있다면 보다 좋은 구현 방법이 될 것이다.

프로세스와 쓰레드는 각기의 장단점을 지니고 있기에 어느 한쪽만을 사용하기 보다는 양쪽 모두 고루 사용하는것이 바람직 하겠다.


쓰레드와 프로세스의 차이점중 가장 큰점은 쓰레드는 프로세스와 달리 공유되는 메모리 공간을 가지고 있다는 점이다.

이것은 장점인 동시에 단점도 될 수 있다. 왜냐하면 메모리 공간을 쓰레드끼리 공유한다는 의미는 쓰레드끼리 통신을 하기에는 쉬우나, 쓰레드들이 동시에 메모리에 접근했을때는 문제를 일으킬 수도 있다는 의미가 된다.

결국 프로세스 기반으로 프로그래밍 하는 것보다도 많은 주의를 기울여야 한다. 부모 프로세스가 자식 프로세스를 생성하는 경우 생성되는 모든 자식 프로세스는 자신만의 독립적인 메모리 공간을 소유하게 된다.

그러나 쓰레드는 생성하게 되는 경우, 스택 메모리 공간만 독립적으로 유지하게 되며 일반적으로 나버지 메모리 영역은 공유된다. 일단 프로그램상에서 쓰레드들은 전역 변수로의 접근이 모두 허용된다고 생각하면 충분할 것이다. 즉 전역변수들은 생성되는 모든 쓰레드들에 의해서 공유된다.


프로세스는 일의 단위이다.

특히 운영체제가 바라봤을 때의 일의 단위가 된다. 그러나 쓰레드는 운영체제의 관점에서 구분하는 일의 단위가 아니라 프로세스 내에서 다시 나누어지는 일의 단위가 된다.

즉 쓰레드는 그 기반을 프로세스에 두고 있다는 소리가 된다. 따라서 프로세스가 존재하지 않는 상태에서의 쓰레드 생성은 불가능하다.


마지막으로 다시 정리하자면, 프로그램을 실행하면 프로세스가 생성되며, 프로세스를 생성하면 기본적으로 쓰레드가 하나 생기는데 이것이 메인 쓰레드이다. 프로세스에는 하나 이상의 쓰레드가 발생할 수 있으며 많은 프로세스가 하나보다 많은 쓰레드를 가지고 있다.

'Linux' 카테고리의 다른 글

사용자 계정 관리 명령  (0) 2015.05.08
사용자 계정 관련 파일  (1) 2015.05.08
소프트웨어 컴파일  (0) 2015.05.08
리눅스의 파일 아카이브와 압축  (0) 2015.05.08
우분투 패키지 설치  (0) 2015.05.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함