так дальше не пойдет!
Если думать только о производительности, оптимальное число потоков на машине
должно быть равно числу установленных на ней процессоров. То есть на компьютере
с одним процессором должен работать всего один поток, на компьютере с двумя
процессорами — два и т. д. Причины очевидны: если количество потоков превышает
количество процессоров, начинается переключение контекста, и производительность
падает. А при наличии одного потока на процессор контекстное переключение не
требуется, и все потоки исполняются на полной скорости.
Тем не менее при разработке Windows специалисты Microsoft отдали предпо-
чтение надежности и быстроте реакции на действия пользователя, а не скорости
730
Глава.26 .Потоки.исполнения
расчетов и производительности выполнения приложений. И с моей точки зрения это
правильно. Не думаю, что кто-либо пользовался бы Windows или .NET Framework,
если бы приложения по-прежнему могли блокировать работу операционной системы
и других приложений. Именно поэтому в Windows каждому процессу выделяется
собственный поток, что повышает надежность системы и быстроту реакции. К при-
меру, на рис. 26.1 показано окно диспетчера задач, открытое на вкладке
Performance
(
Быстродействие
).
рис. 26.1.
.Диспетчер.задач.с.информацией.о.производительности.системы
Как видите, на момент получения снимка экрана на моем компьютере было
запущено 55 процессов, а значит, по меньшей мере 55 потоков. Ведь для каждого
процесса существует хотя бы один поток. Однако как легко увидеть, потоков на са-
мом деле 864! Все эти потоки выделяют память, и это при том, что ее полный объем
на моем компьютере составляет 4 Гбайт. Что же касается соотношения количества
процессов и потоков, то в среднем на один процесс приходится 15,7 потока, тогда
как в идеале на моем двухъядерном процессоре процесс должен состоять всего из
двух потоков.
Более того, расположенная в левом верхнем углу диаграмма загрузки процессора
показывает, что в настоящий момент загрузка составляет всего 5 %. То есть 95 %
времени эти 864 потока в буквальном смысле ничего не делают — они просто за-
нимают память, которая не используется, пока потоки не начинают исполняться.
Резонно спросить, нужны ли приложениям все эти ничего не делающие потоки?
Разумеется, нет. Чтобы посмотреть, какой из процессов является самым «расто-
731
Так.дальше.не.пойдет!
чительным», перейдите на вкладку
Details.
(
Подробнее
), добавьте столбец
Threads
(
Счетчик
потоков
)
1
и отсортируйте его по убыванию, как показано на рис. 26.2.
Do'stlaringiz bilan baham: |