Я разделил сложную задачу обработки массива на несколько потоков, чтобы воспользоваться преимуществами многоядерной обработки, и вижу большие преимущества. В настоящее время, в начале задания, я создаю потоки, а затем жду, пока они завершатся, когда они завершат свою работу. Обычно я создаю примерно в четыре раза больше потоков, так как есть ядра, так как каждый поток может занять различное время, а дополнительные потоки гарантируют, что все ядра остаются занятыми большую часть времени. Мне было интересно, будет ли много преимуществ производительности при создании потоков, когда программа загорается, сохраняя их бездействующими до тех пор, пока они не потребуются, и используйте их при начале обработки. Проще говоря, сколько времени требуется, чтобы начать и закончить новый поток выше и выше обработки в потоке? Я начинаю использовать потоки, используя
CWinThread *pMyThread = AfxBeginThread(CMyThreadFunc,&MyData,THREAD_PRIORITY_NORMAL);
Обычно я использую 32 потока через 8 ядер в 64-битной архитектуре. Этот процесс в настоящее время принимает < 1 секунда, и загорается каждый раз, когда дисплей обновляется. Если начальный и конечный поток равен < 1 мс, возврат не оправдывает усилия. У меня возникли трудности с профилированием этого.
A связанный с этим вопрос помогает, но немного расплывчато для того, что мне нужно. Любые отзывы оцениваются.