Я работаю над программой, которая обрабатывает многие запросы, ни одна из которых не достигает более 50% CPU (в настоящее время я работаю над двухъядерным). Поэтому я создал поток для каждого запроса, весь процесс выполняется быстрее. Обработка 9 запросов, один поток длится 02min08s, в то время как три потока работают одновременно с временем, уменьшенным до 01min37s, но он не использует 100% CPU, всего около 50%.
Как я могу позволить моей программе использовать возможности полных процессоров?
ИЗМЕНИТЬ Приложение не ограничено IO или памятью, они находятся на разумных уровнях все время.
Я думаю, что это имеет какое-то отношение к "двойному ядру".
Существует вызов заблокированного метода, который использует каждый запрос, но он очень быстрый, я не думаю, что это проблема.
Чем больше cpu-дорогостоящая часть моего кода является вызовом DLL через COM (тот же внешний метод вызывается из всех потоков). Эта DLL также не ограничена памятью или IO-ограничением, это компонент распознавания ИИ, я делаю распознавание OCR зарплаты, зарплату для запроса.
EDIT2
Очень вероятно, что метод STA COM - моя проблема, я связался с владельцами компонентов, чтобы решить эту проблему.