Я буду использовать «Процесс», чтобы ссылаться на работу, которая будет происходить параллельно, и «enqueue», чтобы ссылаться на любой процесс, который будет использоваться для инициирования этого процесса (будь то Task.Run, ThreadPool.QUWI, новый Thread() ... что угодно).Гарантировать немедленный запуск параллельных потоков/задач/независимо
У нас есть программа, чувствительная к производительности, которая порождает несколько параллельных процессов для сбора данных.
У нас возникли проблемы с нерестом, что процессы не начинаются немедленно.
В частности, если мы готовим процесс, запускаем таймер, завершаем процесс и проверяем таймер как самое первое действие в этом процессе ... тогда мы видим, что временная задержка иногда растягивается на 100 или даже 1000 секунд миллисекунды.
Учитывая, что сам процесс должен работать только в течение 3-10 секунд, серьезная проблема связана с задержкой между секундами и активацией процесса за 2 секунды.
= - = - = - = - = - = - = - = - = - = - = - = - = - = - =
В настоящее время наши Реализации начали использовать TP.QUWI, а затем мы переходим к использованию Task.Run. Наше первоначальное исследование ведет нас к стратегии создания темы, используемой Threadpool, и использует ThreadPool.SetMinThreads(), поэтому мы придерживаемся этого угла, чтобы убедиться, что это полностью решит проблему.
Но есть ли другое изменение/подход, на который мы должны обратить внимание, если наша цель состоит в том, чтобы начать процесс после enqueuing?
ли ваше использование приложения' ThreadPool' экстенсивно для других «процессов», которые не чувствительны к времени? Почему так важно для вас? – svick
Я не понимаю вопросы, @svick? Да, мы также используем 'ThreadPool' для некоторых фоновых задач, t в первичном критическом поглаживании hs, но я не вижу актуальности. И, как я уже сказал, программа чувствительна к производительности ... Я не понимаю, почему причины для этого были бы важны? – Brondahl