2011. 5. 30. 14:45


프로그램을 개발하다 보면 "스레드~~ 스레드~~ 스레드 써서 개발하면 성능도 좋아지고 좋자네~~" 이런 좆도 모르는 인간들이 저런 개지랄들을 많이 하는데 대부분 보면 저런 소리 하는 인간들은 "스레드"가 뭔지 어떤 녀석인지 논리적으로 설명도 못하고, 철학적으로도 설명을 못한다.

필자가 Thread(스레드)라는게 무엇인지 각인 시켜 주마.

스레드란?
누군가 필자에게 스레드가 뭐냐고 물어보면 난 "스레드는 숨쉬고 있는 녀석이지."라고 대답해준다. 여기서 필자의 개똥철학이 약간이나마 나온다. 각설하고, "스레드라는 녀석은 CPU를 점유하고 있는 함수다." 사실 이 말도 100% 맞는 말은 아니지만 저정도만 해줘도 "이열 십숑키 쫌 아는데~" 이런 소리 들을 수 있다.
이는 즉 우리가 C/C++에서 개발할때 프로그램의 진입점(Entry Point)인 main()함수(또는 다른 함수일 경우도 있따.)는 스레드라는 것을 눈치 챌 수 있다. 그렇다 우리는 이미 항상 스레드를 사용하며 프로그래밍을 해왔던 것이다. 단지 싱글스레드로 프로그래밍을 해왔을 뿐이다.
어..? 시발 설명 끝.

스레드 상태 전이?
스레드라는 녀석은 어떤 논리에 대해 매우 규칙적인 "움직임(상태)"을 보이는데 바로 그 논리는 우리들이 한번쯤은 들어봤을 법한 녀석이다. 바로 "스케줄러"라고 불리는 놈인다. FIFO, Round Robin등 뭐 그런 녀석들이다. 근데 필자는 저 스케줄러에 대해 언급하고자 하는건 아니고, "스레드의 상태"에 대한 부분이다.

참고로 필자는 pthread 라이브러리를 기준으로 그려놨지만, CThread, TThread 건 모든 thread의 상태 전이는 마찬가지이다.

 


"스레드 상태 전이"
라는 키워드로 한번쯤 검색해보면 아주 비슷한 그림을 많이 볼 수 있을 것이다. 이 그림은 필자가 직접 그린 그림인데 사실 이 그림에서 틀린 부분이 있다. 이 문서를 자세히 읽는 사람들은 과연 "이 그림의 어디가 틀렸을까?"라는 고민을 꼭 해보고 넘어가자. 그림만 보고 넘어가는 이는 뭐가 잘못된건지 모르고 넘어가는 불상사가 생길 것이다.

아!! 그리고 time slice over라는 말이 나오는데 이 말의 뜻은 해당 스레드에 할당된 시간을 모두 소진하였다는 말이다.

그럼 간단하게 저 상태들이 무엇을 의미하는지 정도만 알아본다.



끝!


추신.
왠만하면 병렬처리로 프로그래밍은 피하는게 좋다. 멀티 스레드를 사용하지 않고 프로그래밍을 하는것이 좋다는 말인데...
왜냐고?
어려우니까!

Posted by 뿌직