2011-12-04 3 views
2

나는 태스크 대기열/스레드 풀 패턴 시스템을 n -threads 시스템과 비교하고있다. D 프로그래밍 언어는 처음이지만 C, Java 및 Python의 스레드로 작업했다. Tango 라이브러리를 사용하고 있으며 예제로 웹 서버를 구축하고 있습니다.탱고 (D) ThreadPool에 비동기 적으로 작업을 추가하는 방법은 무엇입니까?

tango.core.ThreadPool을 내 스레드 풀로 사용하기로 결정했습니다. 내 프로젝트는 전통적인 스레딩과 작업 대기열 간의 사용 및 성능 향상에 중점을 둡니다. 풀은 대기열에서 작업을 소비하면서 블록, 현재의 thread -

  1. ThreadPool.wait() :

    documentation

    내가 3 가지 옵션을 가지고 있음을 보여준다.
  2. ThreadPool.shutdown() - 풀의 작업을 완료하지만 이 아닌 큐의 대기열은입니다.
  3. ThreadPool.finish() - 풀 및 대기열의 모든 작업을 완료하지만 더 이상 허용하지 않습니다.

내가 원하는 것은 없습니다. 귀하의 업무 목록이 이러한 시스템에서 성장할 수 있어야한다는 것이 제 이해입니다. 웹 서버는 매우 간단하고 순진합니다. 자원 관리가 작업 대기열에서 가능한 빨리 소비하는 것으로 만 구성 되더라도 많은 동시 요청으로 확장하기 위해 최선을 다하고 싶습니다.

메인 스레드가 다른 스레드에 참여해야하기 때문에 의심 스럽지만 스레딩 지식에 약간 녹슬지는 않습니다.

+0

왜 D2를 사용하지 않습니까? 그것은 좋은/좋은 병렬 처리 기능을 가지고 있습니다. –

+0

@Daevius : 그렇지 않으면 Brian이 Tango로 renonce해야합니다. – menjaraz

+0

@Daevius : 개발 환경 때문에 D v. 1로 제한되었습니다. LDC와 Tango 만 사용 가능했습니다. – Brian

답변

0

I를 할당 여기

노트 (미래의 어떤 시간을 실행하는 작업을 제출) 대표자를 구성하는 방식이 코드의 일부에서 차단에 기여한 것을 발견했습니다. SocketServer.accept에 의해 반환 된 개체를 닫지 않고 대신 해당 개체를 매개 변수로 내 대리자에게 전달합니다. 나는 이것이 왜 해결책 이었는지 모르지만 프로그램은 예상대로 작동합니다. D 버전 1의 클로저가 망가 졌다고 들었습니다. 어쩌면 이것과 관련이 있습니다.

0

void append(JobD job, Args args)? 그것은 Executor.execute(Runnable) 형태의 자바처럼 작동 워드 프로세서에서 대신 예상 FIFO 큐의 LIFO 큐 그렇게 충분히 근로자

+0

나는 append를 사용하고있다; 아파치 벤치 마크에서'-c 2'를 사용하면 문제가 발생하기 때문에 제가 잘못하고 있는지 궁금합니다. 나는 그것이 큐가 아니라 스택이라는 주석을 보았다. 왜 그들이 그 결정을 내렸는지 궁금합니다. – Brian