LISTORY

[윈도우즈 시스템 프로그래밍] 프로세스 vs 스레드 (2) 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 프로세스 vs 스레드 (2)

LiStoryTeller 2018. 7. 15. 00:02


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 내용 정리이다.


지난 시간에 이어 내용을 계속하겠다.


YouTube 주소 프로세스 vs 스레드 (2)



프로세스 vs 스레드



지난 시간에 이어, 스레드를 사용함으로 생기는 특성에 이어 정리하겠다.


일단 스레드는 Code, Data, Heap 영역을 공유한다고 했다. 공유한다는 것은 없다고 보면 된다.


코드영역은 쉽게말해 그냥 함수가 올라간다고 볼 수 있다.


함수는 전역함수, main 함수가 존재한다. 모두 아다싶이 main은 특별한 특성을 갖는다. main이 하나의 실행의 흐름이다.


실행의 흐름이 두개라는 것은 main이라는 이름이 아닐지라도 main 역할을 하는 함수가 둘 이상이라는 뜻이다.


스레드A의 main이 m2, 스레드B의 main이 m3이라고 해보자.


main은 프로세스가 생성이 되자마자 실행이 된다.


코드는 main이 실행되는 동안에 m2, m3도 누군가에 의해 실행이 되는 구조로 작성이 된다.


코드 영역 공유한다는 것은 여기에 올라가는 리소스도 공유한다는 뜻이다.


예를 들어 전역함수로서 add() 함수가 있다고 가정해보자. 이는 코드 영역에 올라가 있을 것이다.


당연히 main은 add를호출할 수 있다. m2, m3도 호출이 가능하다. 같은 코드 영역을 공유하고 있기 때문이다.


이게 프로세스와 스레드의 큰 차이이다.


부모 프로세스는 자식 프로세스의 함수를 호출하지 못한다. 자식들끼리도 마찬가지다.


하지만 프로세스에 존재하는 모든 전역 함수는 스레드가 접근이 가능하다.


data 영역, heap 영역도 공유하므로 마찬가지이다.


전역 변수가 있으면 프로세스뿐만이 아니라 스레드들도 접근이 가능하다.


B 스레드가 heap영역에 메모리 공간 할당받았다면 이 공간은 스레드 A도 접근이 가능하다.



프로세스끼리는 공유하는게 없어서 IPC를 통해 통신을 하였다.


하지만 스레드와 프로세스, 스레드와 스레드끼리는 다 공유하기 때문에 별도의 통신 기법이 필요 없다.


그럼 스레드가 더 좋은것인가? 그건 경우에 따라 다르다.


스레드가 담당하는 영역, 프로세스가 담당하는 영역이 다르기 때문에 그 영역에 따라 달라진다.



Comments