Как стать автором
Обновить

Комментарии 4

Ну, с одной стороны, вывод казалось бы очевидный, а с другой - без конкретных данных по "просадке" производительности это мало что полезного показывает. Да, много строчек в табличек, но что если они все особо ни на что не влияют?

Конкретные данные нельзя брать в отрыве от реальных задач. В какой-то задаче оверхед от менеджмента тасок в тредпуле будет существенным для качества решения, в какой-то нет. Ведь задач, которые можно решать с помощью тредпула, много.

Также, конкретные данные нельзя брать в отрыве от какой-то конкретной реализации (и даже в отрыве от определённой конфигурации сервера, где это исполняется). Ведь способов реализации работы с тасками много.

Данная статья не преследует цель показать "вот это решение вот этой задачи в N раз лучше, чем вот то решение". В теме тредпула достаточно тяжело делать такие однозначные и прямолинейные выводы. Ведь она достаточно обширна, до выведения условной "ThreadPool throughput" идти очень далеко и глубоко, и по пути нужно не споткнуться об ThreadPool starvation, не утонуть в высоком потреблении CPU от менеджмента тасок и потоков, и так далее. И я надеюсь, что в этом блоге удастся потрогать все эти нюансы и особенности.

Эта статья, как и весь блог, преследует цель показывать интересные особенности и детали работы .NET'а (и не только). И я надеюсь, что инженеры, которые не так хорошо знакомы с обозреваемыми темами, узнают что-то новое и научатся применять полученные знания на практике. Весь блог посвящен скорее этому, чем рекомендациям "вот это лучше вот того в столько раз".

Кстати, выполнять на тредпуле очень длинные, долгие CPU-задачи тоже ни в коем случае нельзя

Пишем как удобнее, просто не забываем о наличии TaskCreationOptions.LongRunning

"... Cуществуют более эффективные решения, нежели указание TaskCreationOptions.LongRunning:

  • если задачи являются интенсивными в плане ввода-вывода, то вместо потоков следует применять класс TaskCompletionSource.

  • если задачи являются интенсивными в плане вычислений, то отрегулировать параллелизм для таких задач позволит очередь производителей/потребителей, избегая ограничения других потоков и процессов".

    Албахари Джозеф. C# Справочник. Полное описание языка.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий