아... 글쓰다가...

날라갔네... 의욕상실... 흑흑흑...

 

여기서 첨으로 글쓰다보니... 이런 어처구니 없는 실수를....

이번일을 계기로... 항상 저장하는 습관과 열씸히 Sqler 에서 글쓰기!! 도전합니다~ㅎㅎ

  

 

제가 오늘 소개할 내용은... 쓰레드 풀!!!! 입니다~~ 짜잔~~~

 

혹시 쓰레드 풀(Thread Pool) 써보신적 있으신가요?

 

ㅎㅎ 사실 저도 쓰레드 풀은 커녕, 쓰레드도 거의 써본적이 없습니다..

 

헌데, 최근 2년동안 회사 내부에서 사용하는 프로그램을 개발하는데

예상치 못하게, 한번에 대량의 작업을 처리해야하는 요구하는 경우가 생기더군요...

 

음... 예를 들면, 7~8천명 정도의 사람들의 결제정보를 가지고 결제를 시도하는데,

1 by 1 으로만 결제가 가능한경우...

 

순차적으로 결제를 시도하게 되면 완료시점까지는 상당한 시간이 소요되게 됩니다...

 

그래서 고민하게 되었답니다.. 뭔가 시간을 줄일수 있는 방법이 없을까 하구요.

 

그때 발견한 녀석이 바로... 쓰레드 풀!!!! +_+

 

이 녀석을 잘 활용할 경우 대량의 작업처리시에 상당한 시간절약을 꽤할수 있으리~

확신했습니당!!!!

 

그래서 쓰레드 풀을 사용해 보기로 했지요... ㅎㅎ

우선, 쓰레드 풀에 대해 알아야 하니까... MSDN 을 뒤지기 시작했습니다.

 

다행이도, 쓰레드 풀에 대한 기본적인 내용은 MSDN 에서 잘 정리되어 있습니다.

참조 : http://msdn.microsoft.com/ko-kr/library/3dasc8as(v=vs.80).aspx

 

자.. 그럼 이제~~ MSDN 에서 제공하는 예제 소스를 이용해서...

Visual Stuido 실행시키시고~~ C# 콘솔 응용프로그램으로 함께~ 돌려보겠습니다.

 

1.PNG

 

어머나.. 어머나..

보이시나요??

 

10마리의 쓰레드가 풀에 잘들어가서 놀다가

Fibonacci 값을 잘 구해가지고 결과를 짜잔~~ 내고 있습니다.

 

만약 1마리의 쓰레드로 Fibonacci 값을 10개 구하게 하려면...

시간이 훨씬 더 걸립니다... 못 믿겠으면.. 시간체크 해보셈!!!

 

왜 그럴까요???ㅋㅋㅋ

 

어찌되었든.... 우핫핫!!! 바로 이거다 싶었습니다.

이 쓰레드 풀을 잘 활용하면... 쉽게 쓰레드 여러마리를 만들어서

일 을 막 시켜가지고... 결과를 빨랑빨랑 만들어 낼수 있으리라....

 

자자... 욕심을 더 부려 봅시다...

 

10마리의 쓰레드로 10초 걸린다 가정하면...

100마리로는 더 작업시간이 단축되지 않을까...

 

음.. 저는 화끈하게 한 1000만리 정도 만들고 싶었습니다..

 

그래서... 위에 예제소스를 요렇게 바꿔 보았습니다..

2.PNG

 

 우하하.. 만족만족!!!

 이제 엄청 빨라지겠죠!!! 슝슝!!! 바로 콘트롤+F5!!!

 

 ...그러나....

3.PNG

 

 

 이건 뭥미???

 WaitHandles 의 개수가 64보다 작아야 한다는 군요...

 핫....

 

 여기서, 잠시 정리해 보자면... MSDN 에서 소개되어 있는 쓰레드 풀 사용 방식에 핵심은

 ThreadPool.QueueUserWorkItem 함수를 이용해서 인스턴스 들을 쓰레드풀에 집어 넣고~

 WaitHandle.WaitAll 함수를 이용해서 쓰레드풀안에 들어가 있는 애들이 다 작업하고 결과가 나올때 까지

 기달리다가... 결과값 출력하는 건데...

 

 하하하.... 어이 없게도... WaitHandle 이라는 애는 64개 이상은 체크를 못하나 보더라구요...

 

 아... 좌절인가요... 이대로.. 그냥 1000마리의 쓰레드를 포기하기에는...

 저의 자존심이 허락치 않았습니다...

 

 그래서.. 도전 쓰레드 1000마리용 쓰레드 풀 만들기!!

 

 사실 여기서 부터가 진짜인데.. 지금 업무시간에 몰래 글쓰는 거라.. ㅋㅋㅋ

 

 여기서 살짝 마무리하고... 다음편 글에 도전 쓰레드 1000마리용 쓰레드 풀 만들기를 올릴께요~~

 

 좀 재미가 있으셨나 몰겠네요... 다들 흥미 없어 하는 주제인가?? ㅠ.ㅠ

 

 우야튼, 여기서 급 마무리..

 

 샬롬!!! ^^





profile

I love C# ~~ ^^