2011-02-07 3 views
3

스레드 풀링 디자인 패턴이 멀티 코어 미래를위한 방법이라고 생각하십니까?스레드 풀링 및 멀티 코어 시스템

인스턴스의 threadpooling 라이브러리 광범위하게 사용되는 경우, 수/애플리케이션 라이터 강제

(1) 따라서 병렬에게 (:) 시행) 촉진 별도 병렬 작업에 문제가 침입

(2) 모든 저수준 OS 호출의 추상화로 인해 동기화 등을 통해 프로그래머의 삶이 더 쉬워졌습니다.

강한 믿음 (또는 "최고"방법 : 중 하나) 멀티 코어의 미래를위한 ...

그래서, 내 질문에 가장 좋은 방법은 그 한 I (특히 C 프로그래머 : 용),

마이크로 커널 대답은

+0

이 질문은 다소 불분명합니다. SO에 대한 지침은 각 질문에 명확한 정답이 있어야한다는 것입니다 (한 번 발견 된 경우). 흥미로운 주제이기 때문에이 커뮤니티 위키를 만드는 것이 좋습니다. 그러나 질문만큼이나 토론 주제입니다. –

+0

흠, 예. 커뮤니티 위키가 나에게 더 잘 맞습니다. Anders ... Doing : – Microkernel

+0

죄송합니다.이 커뮤니티 게시판을 어떻게 만드나요? – Microkernel

답변

6

스레드 풀링 큐 및 복용 스레드의 수를 포함하는 기술입니다 좋지 않다 스레드간에 더 syncornization을 필요로 다른 작업을 위해 쩔쩔 매게 병렬 http://en.wikipedia.org/wiki/Embarrassingly_parallel

와 괜찮습니다 작업을 큐에서 처리하고 처리합니다. 이는 새로운 작업이 도착할 때마다 새로운 스레드를 시작하는 기술과 대조적입니다.

장점 스레드의 최대 수 제한 너무 많이 스레딩 를 방지하는 것입니다 그리고 새로운 작업에 참여 적은 오버 헤드가 있다는 것을 (스레드가 이미 실행 및 작업 소요됩니다. 어떤 위협이 필요하지 시작).

이 디자인이 좋은지 여부는 문제에 따라 크게 달라집니다. 매우 빠른 속도로 프로그램에 오는 많은 짧은 작업이있는 경우, 낮은 오버 헤드가 실제로 이점이므로 이는 좋은 아이디어입니다. 동시 작업 수가 너무 많으면 스케줄러가 너무 많은 작업을하지 않아도되도록하는 것이 좋습니다.

스레드 풀링이 도움이되지 않는 영역이 많이 있습니다. 그래서 당신은 일반화 할 수 없습니다. 때때로 멀티 스레딩은 불가능합니다. 멀티 스레딩이 코드에 예측할 수없는 요소 (경합 조건)를 추가하여 디버깅하기가 매우 어렵 기 때문에 원할 수도 없습니다.

스레드 풀링 라이브러리는 사용하기가 힘들지 않습니다. 당신은 여전히 ​​물건들을 생각할 필요가 있습니다. 그리고 당신이 단지 하나의 스레드를 시작한다면 ... 도움이되지 않을 것입니다.

1

으로 거의 모든 정보학 주제, 난 그렇게 생각에 작성하거나 좀 망상 :

감사에서 오전 오전 : 그것은 의존한다.

풀링 시스템은 당신이

1

Windows NT 엔진의 경우 스레드 풀은 일반적으로 I/O 완료 포트보다 훨씬 효율적이지 않습니다. 이것들은 수많은 질문과 답변에서 광범위하게 다루어집니다. IOCP는 IOCP에 대기중인 소켓이나 핸들의 IOC (읽기 또는 쓰기)로 인해 이벤트가 발생할 때까지 여러 스레드가 IOCP에서 대기 할 수있는 이벤트 중심 처리를 가능하게합니다. IOCP는 대기중인 스레드와 이벤트 ID를 차례로 연결하고 처리를 위해 스레드를 해제합니다. 스레드가 이벤트를 처리하고 새 I/O를 시작한 후 다음 이벤트를 기다리기 위해 IOCP로 돌아갑니다 (방금 시작한 I/O의 완료 여부 일 수 있음).

또한 IOC는 비 이벤트의 명시 적 게시로 인위적으로 신호를 보낼 수 있습니다.

IOCP를 사용하면 폴링이 발생하지 않습니다. 최적의 IOCP 구현에는 시스템에 코어가 있으므로 IOCP에서 대기하는 스레드 수가 많습니다. 스레드는 효율적이라고 간주되는 경우 모두 동일한 실제 코드를 실행할 수 있습니다. 스레드는 IOC에서 I/O를 발행 할 때까지 처리하기 때문에 스레드 안전 영역에 대한 액세스를 경쟁하는 것을 제외하고는 다른 자원을 기다리게합니다. "스레드 당 하나의 핸들"패러다임에서 벗어나는 것은 자연스러운 선택입니다. 따라서 IOCP 제어 스레드는 프로그래머가 구성 할 수있는만큼 효율적입니다.

0

나는 스레드 풀이 거의 항상 올바른 방법이라고 주장하지만 나는 @yaankee의 답을 좋아합니다. 그 이유는 스레드 풀이 행렬 - 행렬 곱셈과 같은 문제에 대한 간단한 정적 작업 분할 모델로 변질 될 수 있기 때문입니다. OpenMP는 이러한 종류의 가이드 라인을 제공합니다.

관련 문제