Почему работа, связанная с вычислениями, выполняется в меньшем количестве потоков, чем работа, связанная с IO - PullRequest
0 голосов
/ 05 сентября 2018

Пожалуйста, посмотрите это видео с 5:15 - 5:46.

Я смотрел это на YouTube, и парень объяснял о TPL. Я очень новичок в TPL, я никогда не слышал об этом раньше, и я провел некоторое исследование и обнаружил, что это очень сложная система, которая упрощает количество потоков и работы для запуска на машине. Однако из промежутка времени 5:20 - 5:46 он показал 2 примера, которые меня просто растоптали. Первым примером была работа, связанная с вычислениями, которую он написал для цикла for, который повторяется 350 000 000 раз, что заняло у его компьютера примерно 1 секунду. Вторым примером была работа, связанная с вводом-выводом, которую он написал Thread.Sleep (1000).

Мой вопрос: почему в написанной им работе с ограничением вычислений используются только 2 потока, а в работе с привязкой ввода-вывода, которую он написал, используется 5 или 6 потоков?

1 Ответ

0 голосов
/ 05 сентября 2018

Привязка к ЦП означает, что ЦП занят вычислением. Поэтому нет смысла использовать больше потоков, чем доступно ядер. Большее количество потоков означало бы, что ядрам необходимо приостановить один поток для работы с другим - при дополнительном переключении это замедлит всей системы.

Для работы, связанной с вводом-выводом, ЦП просто ожидает ответа от другой системы. Так что пока он может заниматься другой работой. Вот где будет светить асинхронное ожидание.

...