ThreadPool and Socket Programming 비동기 프로그래밍은 내부적으로 쓰레드를 이용한다. 그런데 비동기 호출을 할 때마다 새로운 쓰레드를 생성해서 작업을 하게 되면, 많은 비동기 호출이 일어날 때에는 쓰레드의 수가 너무 많아져서 오히려 컨텍스트 스위칭(context switching)하는 데 시간이 더 걸리는 현상이 일어난다. 이러한 현상을 해결하기 위해서는 적절한 쓰레드 수를 유지하는 것이 해결 방법이라 할 수 있을 것이다. 닷넷에서는 그러한 관리 방법으로 쓰레드 풀이라는 것을 이용한다. 이를 이용해 시스템의 CPU 사용량에 따라 항상 적절한 쓰레드 수를 유지시켜 준다. 쓰레드 풀이란 먼저 풀(pool)의 사전적인 의미는 스위밍 풀(swimming pool)처럼 물 웅덩이, 저수지라는 뜻이 있다. 다른 뜻으로는 카 풀(car pool)처럼 .. Development/C# 15년 전
ThreadPool을 이용한 순차적 실행 순차적으로 실행되어야 하는 일련의 작업이 있다고 하자. 이걸 어떻게 구현하면 될까? 이건 질문 자체가 어이없다. 그냥 차례대로 실행시키면 된다. //[SerialWorkProcessor 구현1] class SerialWorkProcessor { private Queue queue; ... public void Process() { while( this.queue.Count > 0 ) { WorkItem item = this.queue.dequeue(); item.Execute(); } } } 만약 UI Thread가 있고 이 일련의 작업 처리가 UI Thread를 방해하지 않아야 하는 경우라 하더라도, Thread를 하나 생성해서 실행시키는 방법으로 쉽게 해결할 수 있다. //[SerialWorkProc.. Development/C# 15년 전