Какое максимальное количество потоков может иметь процесс в Windows?

В процессе Windows есть ли предел для потоков, которые будут использоваться одновременно. Если да, каково максимальное количество потоков, которое можно использовать для одного процесса?

10

Решение

Я не знаю предела, но есть два практических ограничения:

  1. Виртуальное пространство для стеков. Например, в 32-разрядной версии виртуальное пространство процесса составляет 4 ГБ, но для общего использования доступно только около 2 ГБ. По умолчанию каждый поток резервирует 1 МБ стекового пространства, поэтому верхним значением является 2000 потоков. Естественно, вы можете изменить размер стека и уменьшить его, чтобы в него помещалось больше потоков (параметр dwStackSize в CreateThread или вариант /STACK в команде компоновщика). Если вы используете 64-битную систему, этот предел практически исчезает.
  2. Планировщик накладных расходов. После того, как вы прочитаете тысячи потоков, их планирование будет занимать почти 100% вашего процессорного времени, поэтому они в любом случае в основном бесполезны. Это не жесткое ограничение, просто ваша программа будет работать медленнее и медленнее, чем больше потоков вы создадите.
9

Другие решения

Фактический предел определяется количеством доступной памяти различными способами. Нет ограничений на то, что «вы не можете иметь больше, чем столько» потоков или процессов в Windows, но есть ограничения на то, сколько памяти вы можете использовать в системе, и когда это закончится, вы не сможете создать больше потоки.

Смотрите этот блог Марка Руссиновича:
http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

2

По вопросам рекламы [email protected]