반응형

fork()는 자기 자신과 똑같은 새로운 프로세스를 만드는 것이고
pthread(), 쓰레드는 자신이 원하는 작업을 태스크의 형태로 생성한다.
가장 큰 차이는 별도의 address 공간을 가지는지의 여부

하지만 fork()에서 만든 새로운 프로세스는 fork()를 호출한 부모 프로세스의 메모리 공간에 접근할 수 없습니다.(반대의 경우도 마찬가지 입니다.)

예를 들어 자식 프로세스가 특정 전역변수의 값을 바꾸어도 부모 프로세스는 보는 그 변수의 값은 바뀐 값으로 보이지 않습니다.

왜냐하면 자식 프로세스가 보는 메모리 공간(virtual address => physical address 매핑)과 부모 프로세스가 가지는 메모리 공간이 다르기 때문입니다.

즉 전역 변수가 존재하는 실제 메모리 위치(physical address)가 서로 다르기 때문입니다.

쉽게 생각해서 따로 따로 수행시킨 두 프로그램과 큰 차이를 보이지 않습니다.

반면 pthread()로 만든 thread는 그렇지 않습니다.

두 thread가 바꾼 전역 변수의 값이 모두 잘 보이게 됩니다.

따라서 thread 사이에서 데이터를 주고 받는 방법은 아주 쉽습니다.

다만 synchronization을 위해 몇가지 함수들이 존재할 뿐이죠.

반면에 process 사이에 데이터를 주고 받기 위해서는 IPC(Inter Process Communication)이라고 하는 OS가 지원하는 몇가지 방법만을 사용해야 합니다. 


반응형

'프로그래밍' 카테고리의 다른 글

쓰레드 동기화 함수  (0) 2008.04.28
기본 Thread 함수  (0) 2008.04.28
간단한 thread 함수 예제  (0) 2008.04.28
이진 탐색 트리  (0) 2008.04.28
hungarian prefix  (0) 2008.04.26

+ Recent posts