시스템(System)
윈도우에서 스레드의 의미
•
커널의 구조에 따라 다르지만 윈도우에서는 프로세스 를 ‘ 스레드를 담는 상자 ’라고 말한다
•
프로세스 상태 전이도의 상태는 사실 프로세스의 상 태가 아니고 스레드의 상태이다
•
멀티 스레드의 경우 한 프로세스에 여러가지 상태가 생길 수 있다.
•
실제로 윈도우 스케줄러가 스케줄을 관리할 때에도
프로세스의 스케줄을 관리 하는 것이 아니고 스레드
의 스케줄을 관리 하는 것이다.
멀티 스레드란?
•
스레드는 각각의 스레드 마다 독립적인 스택을 할당 해서 사용한다.
• 스택 영역이 독립이 되면 추가적인 흐름을 만든다.
• 반대로 말해서 추가적인 흐름을 만들게 하는 것이 독립된 스 택
• 즉 스택의 독립성
•
코드 영역과 데이터 영역, 힙 영역을 공유 한다
멀티 스레드란?
•
두 개의 서로 공유하지 않는 프로세스를 사용하게 될 때 프 로세스가 서로 공유하는 코드, 데이터, 힙 영역은 놔두고 공 유하지 않는 스택 영역만 문맥교환을 하도록 하여 부담이 덜 되도록 하는 방법으로 멀티스레드라는 기술을 개발했음
•
하나의 흐름에서 갈라져 나와 여러 개의 흐름을 만드는 것 합쳐지기도 함
•
멀티프로세스처럼 두 개가 독립적인 것이 아니고 공유하는
부분이 있기 때문에 문맥교환시간이 짧다
멀티 스레드란?
•
멀티스레드를 쓰게 되면 메인이 되는 프로세스가 있
고 스택영역만 따로 만들고 나머지는 공유한다 stack
영역에는 함수 운영에 관련 된 정보가 들어가기 때문
에 스레드도 함수 라고 할 수 있다.
커널 레벨 스레드
•
장점
• 커널에서 직접 제공해 주기 때문에 안전성과 다양한 기능성이 제공된다.
•
단점
• 커널에서 제공해 주는 기능이기 때문에 유저 모드에서 커널 모드로의 전환이 빈번하게 일어난다. 따라서 이는 성능의 저 하로 이어지게 된다.
유저 레벨 스레드
•
장점
• 커널은 스레드의 존재를 모르기 때문에, 유저 모드에서 커널 모드로의 전환이 필요 없다. 그래서 성능이 좋다.
•
단점
• 운영체제는 프로세스의 존재만 알고 스레드의 존재를 모른다.
그래서 프로세스 내의 스레드 문제가 발생하지 않게
프로그래밍을 해야 하기 때문에 프로그래밍이 어렵고 커널 레벨 스레드에 비해서 결과 예측이 어렵게 된다.
스레드의 종료 방식
• return 0;
• return문을 통해 스레드를 종료하는 것이 가장 권장하는 방법.
• ExitThread()
• ExitThread()함수 호출을 통한 스레드 종료
• TerminateThread()
• 외부에서 TerminateThread()함수 호출
• 이 함수는 스레드를 강제 종료시킨다.
• 그다지 권장하지 않는다.
스레드의 종료 방식
• return 0;
• return문을 통해 스레드를 종료하는 것이 가장 권장하는 방법.
• ExitThread()
• ExitThread()함수 호출을 통한 스레드 종료
• TerminateThread()
• 외부에서 TerminateThread()함수 호출
• 이 함수는 스레드를 강제 종료시킨다.