Вы можете запустить столько потоков, сколько захотите;вы ограничены только вашей памятью (поскольку каждому потоку требуется немного памяти для отслеживания; в первую очередь, размер стека). Тысяча потоков, как правило, не является проблемой, например.
Этот вывод предполагает, что в любой момент времени 4 из ваших потоков будут активно обрабатывать операторы, а все остальные будут ожидать. Обратите внимание, что потоки являются «приоритетными», то есть они работают некоторое время, а затем автоматически замораживаются, чтобы другой мог иметь ход. Кроме того, если поток «блокирует» по какой-либо причине (блокирует = делает что-то, что должно ждать, пока что-то завершится, а это не ЦП, тогда другие потоки сразу же начинают свою очередь.
Подумайте о:
- Чтение файлов (ожидание диска)
- Отправка байтов по сетевому соединению (дождитесь, пока байты пройдут в буфер сетевой карты / ожидая, пока в этом буфере не будет места)
- Отправка данных звуковой волны на звуковую карту
- Просто «подождите несколько секунд» инструкций
Короче? Просто создайте столько потоков, сколько хотите,и относиться к ним так, как будто они все работают одновременно. Нет причин беспокоиться о производительности или о том, что это правильный подход, пока вы не получите более тысячи из них.