문제

해야 하는 경우 사용 ThreadPool 습니다.Net?

그것은 다음과 같은 최고의 옵션을 사용하는 것입 ThreadPool,어떤 경우에,그것은 왜지 않습니다.

여러분은 어떤 경험을 하셨나요?이것을 이용할 수 있을까요?

도움이 되었습니까?

해결책

유일한 이유는 내가 사용하지는 않을 것 ThreadPool 저렴한 멀티 스레드가 필요할 경우를...

  1. interract 방법으로 실행하는(예를 들어,그것을 죽일)
  2. 실행 코드 STA 스레드 (이 나에게 일어난)
  3. 유지 살아 내 응용 프로그램은 사망(ThreadPool 스레드가 백그라운드 스레드)
  4. 는 경우에 필요의 우선 순위를 변경하려면 Thread.우리는 우리를 변경할 수 없습의 우선 순위를 스레드에서 ThreadPool 는 기본적으로 정상입니다.

P.S.: MSDN 문서 "관리 Thread Pool" 담 이라는 제목의 섹션, "때 사용하지 않는 스레드 풀 스레드", 와 매우 비슷하지만 약간 더 완전한 목록의 가능한 이유를 이용하지 않는 스레드 수영장도 있습니다.

많은 이유해야 합 건너뛰기 ThreadPool, 하지만 알지 못하는 경우 그 다음 ThreadPool 해야 충분히 좋습니다.

또,새로운 Parallel 확장 Framework, 는 일부를 깔끔한 물건을 거기에는 귀하의 요구에 맞게 사용하지 않고 ThreadPool.

다른 팁

@Eric,가 동의 바다다.스레드에 비쌉니다.할 수 없는 귀하의 프로그램을 실행하는 하나의.할 때 모든 사람은 욕심을 가진 자원,문제는 곱한다.

내가 만드시 내 스레드 수동으로 제어하는 자신입니다.유지 코드를 이해하기 매우 쉽습니다.

는 적절한 경우.필요할 경우 무리의 worker threads,하지만,모든 당신이 한 것은 당신의 코드 더 복잡합니다.지금 당신은 코드를 작성해야를 관리할 수 있습니다.만약 당신이 그냥 사용되는 스레드 풀에,당신은 모든 스레드 관리에 대한 무료입니다.고 스레드 풀에 의해 제공되는 언어는 매우 가능성이 더 강력한 것으로 알려져 있고,더 효율적이고,적은 버그보다 무엇이든 당신이 자신을 위해 롤.

Thread t = new Thread(new ThreadStart(DoSomething));  
t.Start();  
t.Join();  

당신은 일반적으로 몇 가지 추가 코드에서는 사 Start()Join().그렇지 않으면,여분의 스레드가 쓸모없는,그리고 당신은 자원 낭비 없는 이유입니다.

사람들은 너무 두려워 사용하는 리소스 스레드입니다.나는 본 적이 없어를 만들고 시작하는 쓰레드를 더 밀리세컨드.이 없 하드의 수에는 제한이 스레드를 만들 수 있습니다.RAM 을 사용량 최소화합니다.가 있으면 몇 백 threads CPU 문제가 발생기의 컨텍스트 스위치,그래서 그 시점에서 수 있습을 얻고 싶은 공상과 디자인이다.

밀리세컨드이 시에 현대적인 하드웨어입니다.는 3 만명 주기에서 3ghz 기계입니다.그리고 다시,당신은 없습니다만 하나의 스레드를 만듭.귀하의 스레드를 위해 경쟁 CPU 와 함께 다른 모든 프로그램의 스레드입니다.당신이 사용하지 않은 아주 너무 많은 스레드,그리고 그래서 다른 프로그램을 함께 다음 사용이 너무 많은 스레드입니다.

심각하게하지 않는,생명보다 더 복잡은 그것이 필요합니다.를 사용하지 않는 스레드 풀지 않으면 당신이 무언가가 필요 매우 특정을 제공합니다.

참이다.하지 않는 생활은 더 복잡합니다.하는 경우 프로그램에 필요한 여러 worker threads,바퀴를 재발견하지 마십시오.스레드 풀을 사용합니다.그 이유는 그것이있다.당신은 자신의 롤 string 클래스?

스레드 풀을 의미가 있을 때마다의 개념 worker threads.할 수있는 시간을 쉽게 파티션을 처리 더 작은 일로,각각 처리할 수 있는 독립적으로 worker 쓰레드(그리고 그러므로 스레드 풀)습니다.

스레드 풀을 만들지 않는 감각이 필요할 때 실를 수행하는 전반적으로 다르와 관련이 없는 행동하는 것으로 간주할 수 없습 작업을"";예를 들어,하나의 스레드를 위한 GUI 이벤트 처리,다른 백엔드를 처리합니다.스레드 수영장도 만들지 않는 감각 처리할 때는 형태로 파이프라인.

기본적으로,당신이 스레드 시작,프로세스,작업 종료,스레드 풀은 아마도 갈 수있는 방법입니다.그렇지 않으면 스레드 풀을 사용하지 않는 정말 도움이 될 수있다.

을 시비를 거의 대답은,나를 추가하는 것이 최선의 방법이라고 사용하지 않는 ThreadPool 스레드가 필요할 경우를 보장하는 스레드가 즉시 작업을 시작.최대 수의 실행 스레드 풀 스레드가별로 제한용,그래서 당신의 작업의 조각을 기다려야 할 수도 있습니다면 그들은 모두 바쁘다.그것은"큐 사용자 작업 품목"다.

두 가지는 경고의 코스:

  1. 을 변경할 수 있습의 최대 개수는 스레드 풀에서 스레드 코드,런타임,그래서 거기는 아무것도 당신을 막을 확인하는 현재 대의 최대 수를 늘리기는 최대의 경우 필요합니다.
  2. 회전시키는 새로운 스레드를 제공과 함께 그것의 자신의 시간을 벌이든지 당신을 위해 가치가있을 명중에 따라 달라집니다.

난 말하지 않는 사람으로만 이론적인 지식을 여기에.쓰 고 유지하는 높은 볼륨 응용 프로그램 는 것을 많이 사용하는 다중 스레딩 나는 일반적으로 찾을 수 없는 스레드 수영장하는 올바른 대답이다.

Ah,인수 기관에서-그러나 항상 사람들을 위해 밖으로 보기에 있을 수 있습 Windows 커 팀이 있습니다.

우리들의 어느 쪽도 아니는 논쟁을 벌였다는 사실이 있는 경우 몇 가지 특정 요구 사항에는 다음.NET ThreadPool 되지 않을 수도 있습니다.......무엇을 우리는 반대하는 trivialisation 비용의 기계를 만드는 스레드가 있습니다.

한 상당한 비용을 만드는 스레드에서 존재 이유에 대한 ThreadPool 에서 첫 번째 장소입니다.나는 원하지 않는 나의 기계로 가득 할 코드에 의해 작성되었다 사람들을 잘못된 정보에 대한 비용의 스레드를 생성과하지 않는,예를 들어 알고 있는 원인 방법이라고 할 모든 단일 DLL 는 프로세스에 연결되어 있(의 일부를 만들 수 있는 제 3 자에 의해)및 수 있는 잘 뜨거운 부하 제공하는 데 도움이 될 필요는 없 RAM 에서 거의 확실히 필요 하지 않은 것에 L1.

모양의 메모리 계층구조에서는 현대적인 기계는 것을 의미하는'산'a CPU 에 대한 최악의 일을 할 수 있는 가능성이,그리고 모든 사람들에 대한 관심이 그들의 공예를 열심히 일해야한다면 반드시 피해야 합니다.

을 때 수행하는 작업을 오랜 시간이 걸릴 또는 아마도 지속적인 배경 thread.당신이 항상 밀어 양의 스레드를 사용할 수 있는 수영장에서만 있는 것이 작은 점에서 발생한 관리 비용의 스레드가 될 수 없어 돌아 수영장도 있습니다.

MSDN 목록을 가지고 몇 가지 이유가 여기:

http://msdn.microsoft.com/en-us/library/0ka9477y.aspx

거기에 여러 가지 시나리오에서는 적절한을 만들고 관리 당신의 자신의 스레드를 사용하는 대신 스레드 풀 스레드:

  • 당신이 필요 포그라운드 스레드가 있습니다.
  • 당신이 요구하는 스레드가 있는 특정 우선 순위입니다.
  • 이 있는 작업의 원인이 쓰레드를 차단하는 장시간의 시간입니다.스레드 풀 스레드의 최대 수,그래서 대형 의 번호를 차단 thread 수영장 스레드하지 못할 수도 있습에서 작업 시작합니다.
  • 필요하신 곳으로 스레드를 하나의 스레드 아파트.모든 ThreadPool 스레드에서 다중 스레드 아파트입니다.
  • 당신은 필요한 안정적인 정체성과 관련된 스레드,또는 바치 스레드하는 작업입니다.

Threadpool 스레드가 적당한 작업을 모두 충족하는 다음 기준:

  1. 작업에 지출하지 않는 모든 뜻깊은 시간을 기다리고 무슨 일이 일어날
  2. 도를 기다리는 작업을 마무리될 것이 기다리고 있는 많은 작업을 마무리가 되어 있기 때문에,그것의 일정을 우선하지 않 apt 에 영향을 미칠 것이다.

사용 threadpool 스레드를 생성하는 대신 새로운 중 하나를 저장할 것이 중요하지만 제한 양의 시간입니다.는 경우에는 시간이 중요한과 비교해 시간이 걸릴 것입니다 작업을 수행,threadpool 작업은 가능성이 적절하다.더 이상 시간이 수행하는 데 필요한 작업,그러나,작은 이익을 사용하는 threadpool 과의 가능성이 더 큰 작업을 방해하는 threadpool 효율입니다.

@에릭

@데릭,누구에게도 뒤지지 않는 동의와 시나리오를 사용하여 예를 들어 있습니다.지 않는 경우에 정확히 알고의에서 실행되는 기계와 정확히 얼마나 많은 총 스레드,처리,CPU,RAM,etc.,앱에서 사용의 일정 금액을 로드하는,당신은 문제에 있습니다.

당신은 유일한 대상에 대한 고객 프로그램을 작성?하지 않을 경우,당신은 할 수 없습에 대한 특정 가장합니다.당신은 일반적으로 아무 생각이 없 프로그램을 작성할 때는지 그것이 실행됩니다 효과적으로 솔로,또는 경우에서 실행됩니다 웹 서버되는 것으로는 망치로 DDOS 공격합니다.당신은 알 수 없습니다 얼마나 CPU 시간을 당신은 것입니다.

가정 프로그램의 행동의 변화에 따라 입력,그것을 알지도 정확히 얼마나 많은 메모리거나 CPU 시간을 프로그램이다.확실히,당신이 있어야 아주 좋은 생각이는 방법에 대해 귀하의 프로그램이 동작하지만,대부분의 프로그램은 결코 분석을 정확하게 측정하는 메모리,얼마나 많은 처리,등등.사용될 것이기 때문에 전체 분석은 비싸다.지 않는 경우 쓰기 실시간 소프트웨어,보수 없는 노력이 가치가 있습니다.

에서 일반적인 주장을 정확히 알고 있는 프로그램이 어떻게 동작하는 억지 주장하는 모든 것을 알고 기계에 대 한 접근할 수 있게 되었습니다.

고,정직하게 알지 못하는 경우 정확히 어떤 방법을 사용해야 합니다:수동 스레드 스레드 풀,대리인,그리고 그것을 구현하는 방법을 다만 어떤 응용 프로그램이 필요,당신은 문제에 있습니다.

지 않아요 완전히 동의하지 않지만,나지 않을 정말로 이해하는 관련이 있습니다.이 사이트가 여기에 특별히기 때문에 프로그래머지 모든 답변이 있습니다.

하는 경우 응용 프로그램을 필요로 할 정도로 복잡한 제한의 개수는 스레드를 사용하지 않는,당신은 거의 항상 제어하려는 것보다 프레임워크를 제공할?

No.가 필요한 경우에는 스레드 풀,나는 것입니다 하나를 사용하는 경우를 제외하고는 제공되고를 찾을 때까지 하는것으로는 충분하지 않습니다.나는 단순히 가 제공하는 스레드 풀이 부족한 필요없이 확인될 경우입니다.

난 말하지 않는 사람으로만 이론적 지식을 여기에.쓰고 유지하는 높은 볼륨는 응용 프로그램을 많이 사용하는 다중 스레딩,그리고 나는 일반적으로 찾을 수 없는 스레드 풀을 수 있습니다.

대부분의 전문적인 경험을 가진 다중 스레딩과 다중처리 프로그램입니다.저는 종종 필요로 나 자신의 솔루션을 뿐입니다.는 것을 의미하지 않는 스레드 풀을 유용하지 않거나,적절한 경우가 많습니다.스레드 풀을 처리하기 위해 만들어졌 worker threads.는 경우에는 여러 worker 쓰레드가 적당한,제공된 스레드 풀어야 합해야 합니다.첫째로 접근 방식이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top