Dr Dobbs 사이트에서 오늘 알게되었습니다 http://www.ddj.com/hpc-high-performance-computing/220300055?pgno=3 실의 임 플리 멘 테이션에 관한 좋은 제안입니다. 델파이에서 TThread로 이것을 달성하는 가장 좋은 방법은 무엇입니까? 감사 브라이언델파이에서 쓰레드 수를 프로그래밍하는 법
박사 돕 스는의 ==============에서===
만들기 멀티 스레딩이 구성! 프로그램에서 사용되는 스레드의 수는 항상 0 (추가 스레드 없음)에서 임의의 수로 구성 가능해야합니다. 이는 최적의 성능을위한 사용자 정의를 허용 할뿐만 아니라 클라이언트 시스템에서 알려지지 않은 경쟁 조건이 발생할 때 좋은 디버깅 도구이자 때로는 생명의 은인임을 입증합니다. 고객이 멀티 스레딩을 해제하여 치명적인 버그를 극복 할 수 있었던 두 가지 이상의 상황을 기억합니다. 이것은 물론 멀티 스레드 파일 I/O에만 적용되는 것은 아닙니다.
는 다음 의사 생각해 (조금 더 작업이 아마 여기에 표시된 것보다 필요합니다하지만)
int CMyThreadManger::AddThread(CThreadObj theTask)
{
if(mUsedThreadCount >= gConfiguration.MaxThreadCount())
return theTask.Execute(); // execute task in main thread
// add task to thread pool and start the thread
...
}
이러한 메커니즘은 매우 복잡되지 않습니다,하지만 때로는 매우 효과적입니다. 또한 OpenMP 또는 인텔의 스레드 기반 빌딩 블록과 같은 사전 작성된 스레딩 라이브러리와 함께 사용할 수도 있습니다. 여기에 표시된 측정 값을 고려할 때 구성 가능한 스레드 수를 두 개 이상 포함하는 것이 좋습니다 (예 : 파일 I/O 및 코어 CPU 작업의 경우). 파일 I/O의 기본값은 0이고 CPU 작업의 경우 < 개의 코어 수가 >입니다. 그러나 모든 멀티 스레딩은 분리 가능해야합니다. 보다 정교한 접근법은 멀티 스레드 성능을 테스트하고 자동으로 사용되는 스레드의 수를 설정하는 코드를 포함 할 수도 있고, 다른 작업을 위해 개별적으로 사용될 수도 있습니다.
===================
스레드를 일시 중단하고 다시 시작할 필요가 없습니다. 각 스레드가 이벤트 나 세마포어를 기다리거나 스레드 메시지 루프와 함께'WaitMessage()'를 사용하십시오 (OLE의 경우 필요할 수 있음). 그래서 [delphi] 아래에있는 주제에 대한 많은 토론이 있습니다.하지만, Embarcadero와 Microsoft devs보다 더 잘 알고 있다고 생각하는 사람들의 주장을 무시하고,'Suspend()'를 사용하여 여러분에게 말하려고합니다. 'Resume()'는 괜찮을 것이다. – mghie