@ Process와 Thread는 굉장히 중요한 시스템입니다.
@ MultiThreading을 배웠는데
> 기존의 문제를 어떻게 해결하고
> 내부에 어떻게 구현하는지를 배웠습니다.
@ MultiThreading을 구현하는 방법은 크게 3가지였습니다.
> User
.. Massively Palarell system에서는 효과적이었습니다.
.. reactive system에서는 사용하기 힘들었습니다.
> Kernel System Call
.. OS가 Kernel System으로 Thread를 생성합니다.
> Combined
.. 위 두 방식의 장단점을 보완하는 방식입니다.
@ Combined Thread Approach 중 하나는
// Sun Micro System은
> Kernel Level Thread와 User Level Thread를 Associate시키며
.. 동일한 것처럼 관리를 합니다.
> Kernel 과 User Thread는 M to M 관계를 가질 수 있습니다.
.. User에서는 Thread를 Process처럼 여기고 virtual Thread로 생각합니다.
@ Thread의 가장 마지막 이슈는 다른 방식으로 바라봅니다.
// 응용 프로그래머의 입장에서는 MultiThreading을 어떻게 사용할까요?
> 기존은 Single Thread를 사용하는 것이 익숙합니다.
.. main 함수 하나에서 수행
// MultiThread가 제공하는 API를 이해할 필요가 있습니다.
> POSIX(UNIX의 API의 표준을 정의)
.. 여기에서 MultiThread에 관해서 Pthread라는 API가 제공됩니다.
@ Thread Life Cycle
// 일단 Process가 수행될 때, UNIX의 Convention을 따릅니다
> 기존 Process는 하나의 Main Thread를 가지게 됩니다.
.. 이 Thread가 다른 Thread를 support합니다.
// Main Thread는 나머지 Thread를 모니터링하는 일을 하게 됩니다.
@ Thread Life Cycle implementation
// TaskCode는 Argument를 받아서 Argument를 Print하고 Terminate하는 일을 합니다.
// Process를 Create합니다.
> Parameter로 TaskCode Function pointer를 넘깁니다.
.. 그리고 수행할 수 있게됩니다.
> Thread Argument는 Sequence number가 됩니다.
// main Thread는 5번 돌면서 join(wait)을 수행하게 됩니다.
@ MultiThreading을 한다는 것은
// 여러 Process가 interliving하면서 같이 도는 것이기에
> 상상하기 쉽지 않습니다.
// User과 Kernel이 어떻게 다른지 알아야 합니다.
> user는 create할 때 compile 되고 link될 때 하나의 image로 수행이 됩니다.
> Kernel일 때는 모두 System call 이라는 차이점이 있습니다.
@ 이해가 잘 안되시죠? 저도요 ㅎㅎㅎㅎㅎㅎㅎ 추후 다시 정리하도록 하겠습니다.