сколько потоков я могу создать?
Waaay, waaay больше (сотни или тысячи раз), чем вы хотели бы создать для оптимальной пропускной способности.
Ограничения для каждого потока (в Windows), о которых я знаю:
- 16-битный идентификатор потока
- выделение 4-8 КБ для стека пространства пользователя (как правило, намного больше)
- Нестраничный контекст и стек пространства ядра, что-то вроде 16 КБ
Dotnet, вероятно, добавляет кучу накладных расходов для каждого потока. GC и тому подобное.
Одна формула, которую мне нравится использовать для WAG:
threads = 2 * (cpu cores + active disk spindles)
Оптимальное число обычно в два раза больше. того, что. Теория состоит в том, что необходимые потоки пропорциональны ядрам процессора (по понятным причинам), но также и то, что некоторые потоки будут блокировать дисковый ввод-вывод. Умножение на два дает процессору что-то делать, пока другие потоки заблокированы.
В любом случае, начните с этого и измерьте его. Количество рабочих потоков - это самая простая часть всей проблемы, которую можно настроить позже, поэтому не стоит слишком беспокоиться об этом сейчас.