쓰레드 스케쥴링 & NT/Linux 체감속도
좋은 프로그램을 만들려면 쓰레드에 대한 이해가 필수겠다는 생각이 들어서,
쓰레드 공부를 하고 있습니다.
요즘은 자바 쓰레드 능숙하게 다루기 라는 책을 보고 있는데..
거기서 NT와 솔라리스의 쓰레드 스케쥴링 개념을 잠시 다루더라구요..
NT 의 쓰레드 스케쥴링 기법중 특이한것이,
Priority boosting 이라는 매커니즘을 이용한다는 것인데..
'I/O 와 관련된 일 등에 대해서 쓰레드의 우선 순위를 필요하다고 생각하는
정도만큼 올리며, 필요하다고 생각하는 시간만큼 이 우선 순위를 유지한다.
이렇게 우선 순위 증대라는 괴기스러운 방법을 사용하는 이유는 백그라운드
작업이 현재 보이는 UI의 작업에 영향을 끼치지 않도록 하기 위함이다.'
라고 책에서 설명하는 군요...;;
저렇게 된다면, 일반적인 사용자가 사용할때 체감속도가 빨라질 수도 있겠군요..
I/O 작업의 쓰레드 우선순위를 올려버리니.. -_-;
어쨌든 이 책의 저자는 저런 NT 의 쓰레드 관리 방식을 매우 형편없다고
평가하면서, '필자의 생각으로는 이런 식으로 처리해놓은 진짜 이유는
마이크로소프트에서 NT가 진짜 서버로 사용될 것이라고는 생각하지 않아서가
아닐까 싶다.' 라고 말하는 군요.. -_-;
저러한 쓰레드 스케쥴링의 차이도, 일반 사용자가 2000/XP 같은 OS 를 쓰다가
Linux 데스크탑 환경으로 옮겨왔을때 느리다고 느끼게 되는 한가지 이유가
될 수도 있겠다는 생각이 드네요.
p.s 책의 글을 너무 많이 인용한거 같기도.. -_-;
이런건 저작권에 안걸립니까.. -_-;;;
Re: 쓰레드 스케쥴링 & NT/Linux 체감속도
글쎄요... 저는 저 저자분의 의견에 동의를 못 하겠군요....-_-
어차피 서버용이라면 foreground thread가 어차피 idle 상태일텐데, 저런 관리방식에 의해 손해를 볼 게 하나도 없을 것 같은데요....
마우스포인터 한끝도 안 움직일 때 아무것도 안 하는 foreground application에서 프로세스를 잡아먹는 경우는.... 거의 없지 않나요? 프로그램 엉터리로 짠 경우를 제외하고는.... 그리고, 설사 위의 저자의 생각과 같은 상황이 정말로 맞는다면, 그런 policy를 제거하는 것이 그렇게 힘들까요? 제 생각에는, 저런 NT의 thread 정책은 데스크탑에서는 이득을 많이 보고 서버에서는 별 손해를 안 보는 방식 같습니다.
리눅스에서는 비슷한 방식으로 하고 싶더라도 커널 레벨에서는 쉽지가 않을 듯 하네요. 커널의 입장에서는 어떤 프로세스가 포그라운드고 어떤 프로세스가 백그라운드인지 판단을 못 할테니깐요....
어떤 레벨에서 이를 판단하여 priority를 조정해 줄 수 있을까요?
Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24
그것이 가능한 레벨은
포어그라운드 프로세스 여부를 따질수 있는 레벨은
쉘 혹은 윈도매니져(정확히 따진다면 X서버)정도가 아닐까 하네요.
어차피 포어그라운드란것이 사용자와 연결되어야 의미가 있는 것이니까,
인터페이스에서 결정할 문제겠지요.
No Pain, No Gain.
쩝,
엉터리네요
윈도우에 UI에 관련된 부분을 많이 사용하지만 않는다면
아무런 상관이 없는데 ...
저렇게 책을 쓰다니 , -_-;
그리고 일반 윈도우의 경우에는 현재 활성화 되어 있는 윈도우의
쓰레드 우선순위를 높여서 UI작업에 유리하게 끔 해주지만
서버급 NT이상의 윈도우에서는 옵션으로 활성화 되어 있는 UI에 관련된
윈도우창이 있더라도 똑같이 다른 프로세스와 스케쥴링합니다
[옵션으로 스케쥴링 정책 설정 가능]
한마디로 UI가 실행되는 부분이나 아닌곳이나 똑같이 해주기때문에
저 책을 쓴 사람은 윈도우에 대해 정말 알고 저런 글을 쓴거 같지 않네요
꼭 학교에서 리눅스 유닉스 맹신자 교수님과 같은 스타일이라고 생각될 정도
사실 저런사람의 글이나 말은 별로 득이 되지 못합니다
전 윈도우 OS도 공부하고 유닉스 OS도 둘다 공부하고 있는데
질문하신분도 여러 OS를 공부해보시면
윈도우가 얼마나 뛰어난 운영체제인지 느끼게 될겁니다
책 저자의 이름좀 확인해 봐야겠네요
책을 읽으면 읽을수록 엉터리 지식으로 쓴 책들이 점점 눈에 많이
뜁니다
그리고 우선 순위를 올린다는 말이 애매하네요
윈도우나 솔라리스 같은 경우 우선순위가 높으면
먼저 스케쥴링을 한다는 의미인데
OS 마다 우선순위가 높을수록 스케쥴링을 먼저하는 경우의
OS도 있고 낮을 경우 먼저 하는 경우의 OS도 있어
제 각각 우선순위에 대한 경우가 다릅니다
어째튼 책의 질이 의심스럽네요
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
APress의 Taming Java Thread, Allen Holub씨
APress의 Taming Java Thread, Allen Holub씨의 책이 아닌가요?
그런 문장을 읽어본 것 같은데요. :-)
오래전에 읽어서 확실히 기억은 안나지만, 의도하지 않은
Priority Policy에 대한 비판을 한것으로 기억합니다.
덕분에 그나마 간단하게 있던 Java Thread의 priority 세팅이 의미가
줄어든다는 내용이었던 것 같네요.