cpu 는


대부분 너무 잘 아시니까

별로 설명할 것은 없어요.



다나와 cpu 검색인에요.




일단 코어 라는 말과

쓰레드 , 스레딩 이런 말이 나와요.


코어는 그냥  cpu 1 개  이에요.

쿼드 코어면  cpu 4개   가 한 칩에 있는 거에요.


cpu 랑 코어는 약간 감이 오는데

쓰레드는 감이 잘 안오실 거에요.



저는 게임 프로그래머로 15년 재직 후 5년 지났어요.

지금은 놀고 있어요 [백수].


저는 클라이언트 프로그래머인데

사실 쓰레드를 무쟈게 마니 쓰는 쪽은 사실은 서버에요.

서버 프로그래머는 쓰레드 도사에요.


그런데 저는 클라 프로그래머인데

생각보다 쓰레드 프로그래밍을 서버 프로그래머

못지 않게 잘 썼어요.


16코어 cpu 를 메인보드에 2개를 꽂아

토탈 32 코어에서 쓰레드 프로그래밍을 한 적이 있어요.


그래서 쓰레드가 뭔지 알려드리고 싶어요.

%지금은 백수지만 ㅎㅎ



쓰레드 와 코어는 쪼금 성격이 달라요.

코어는 앞에서 말한대로  cpu 에요.


요즘 직접도[좁은 공간에 잔뜩 넣는 기법] 

기술이 좋아져서 칩 하나에 cpu 4개 넣고 쿼드 코어라 해요.


8개 넣은 건 옥타 코어라 하고요.

2개 넣은 건 듀얼 코어라고 해요.



코어는 그냥 cpu 에요.


그런데 쓰레드는 좀 달라요.



쓰레드는 일상 생활로 치면 일감이에요.

일하는 내용이에요.


예를들어

식당을 와우 클라 프로그램이라고 해보죠.


주인 혼자

요리,서빙,청소,배달,전화받기 다 하면

싱글 코어에서 여러 쓰레드를 돌리는 거에요.


코어에 무리가 갈 거에요.


즉, 코어는 일할 수 있는 사람

쓰레드는 서빙,요리 이런 일감이에요.



주인이 혼자 힘들어서

일용이를 채용했어요.


그럼 듀얼 코어가 된거에요.

% cpu 2개


일용이한테

전화받기를 시켰어요.


그럼 전화받기 쓰레드가

일용이 코어에 할당 된거에요.




그러면 하이퍼 쓰레딩 은 뭘까요 ?


일용이가 전화 별로 잘 안오는

오후 서너시에 맨날 놀아요.


그래서

서너시에 청소를 시켰어요.


그럼 일용이 코어에서

전화 쓰레드 와 청소 쓰레드가 할당된거에요.


그럼 일용이는 전화올 때는 전화만

전화 없을 때는 청소만 하죠.


즉, 코어를 노는 시간 없이 최대한 돌리려고

하는 기술이 하이퍼쓰레딩 이에요.



음 .. 그러니까


하이퍼쓰레딩은 윈도우즈가

인텔과 짜고 코어 한 개에 2개의 쓰레드를

교대로 쉬는 시간에 돌리도록 미리 짜고 치는 고스톱이에요.


윈도우가 소프트웨어적으로만 하지않고

인텔에서도 하드웨어 가속이나 편의성을 지원한다는 거에요.



그럼 실제 와우는 어떨까요 ?


제가 겜 클라 프로그래머였는데요.


실제 겜은 일감이 많아요.



예를들어


PC 에 있는 그래픽 데이터를 잔뜩

PC 메모리에 올려요.


그런데 와우는 너무 방대해서 한 번에 다 못올려요.

그러니 유저가 현재 있는 맵 근처 그래픽 데이터만 올려놔요.


그리고 유저가 탈 것 타고 다닐 때

향후 나올 것을 미리 미리 조금씩 로딩해요.


% 이런 것을 심리스 로딩이라고해요.

구글 검색에서 게임 심리스 로딩 하고 검색하면 뭔지 다 나와요.



이런 로딩 부분을 프로그래밍 쓰레드로 만들어요.



그리고 수없이 채팅을하죠.

그리고 서버와 패킷을 주고 받아요.


주변에 있는 모든 몹과 다른 유저들이 보여야되요.

그래서 패킷을 수도없이 주고 받아요.


그래서 네트웍 통신 부분을 쓰레드로 만들어요.


앞에 제가 말한대로 쓰레드는 할 일, 즉 일감이에요.



그리고


비디오 카드에 현재 화면에 보이는 부분을

그리라고 알려주고 필요한 그래픽 데이터를

PC 메모리에서 비디오카드로 내려보네요.


거기에 키보드 마우스 입력도 꾸준히 받아야되요.


이런 부분은 별도 쓰레드로 하지 않고

그냥 exe 메인 에서 해요.


여기를 메인 쓰레드라고해요.



프로그래머는 다음과 같이 프로그램을 만들어요


main thread [와우.exe] : 비디오 카드에 그림 그리기, 키 입력, UI 처리 등

createThread("네트웍 통신 일감")

createThread("심리스 로딩 일감")


이렇게 만들어 놓으면

윈도 OS 가 프로그래머가 만든 쓰레드 3개를

cpu core 에 할당을 해요.


되도록 덜 바쁘고 노는 코어에

쓰레드를 자동 할당해요.


그러다 보니

아무래도 코어 수가 많으면 유리해요.



그렇다고 괜히

코어수가 너무 많아도 낭비에요.




위 그림 처럼 작업관리자에서

논리 프로세서 누르시면 모든 코어가 아래 그림 처럼 나와요.






그러면 cpu 사용률을 알 수 있어요.

논리 코어 [하이퍼 쓰레드] 4개 , 즉 그냥 코어 2개 인데도

와우 겜 중인데도 18% 밖에 사용안하고 있어요.


여기서 클락 3.29 GHz 는

코어 한 개의 성능이에요.


앞서 말한대로 겜 클라 프로그램은

쓰레드 수가 수십 개씩 띄우는 것이 아니라

서너 개 띄우는 것이 보통이에요.


그래서 논리코어 4개 정도, 즉 듀얼이나 쿼드 코어라도

클락 성능이 되면 돌리는데 큰 지장은 없어요.


앞에서 말한대로

와우는 그래픽이 방대하니까

cpu 는 너무 쎄게 하지 마시고 메모리 용량[16 기가 정도]에 좀 신경을 쓰셔야되요.


이만 줄일께요.


추석 잘 보내시길 바래요.