То же, что вы слышите, когда этот вопрос задается для сервера: не делайте предположений , проводите экспериментов .
Попытайтесь определить (наихудший случай: угадать) типичную настройку оборудования, на которой ваши пользователи работают с вашим программным обеспечением. Затем убедитесь, что вы можете выполнять качественно автоматизированное тестирование производительности. А потом посмотри, что произойдет.
Но дело в том, что это мало поможет. Видите ли, когда вы запускаете свой собственный сервер, вы (надеюсь) контролируете рабочую нагрузку, с которой работают эти машины. Для настольной установки, где удаленные пользователи запускают ваш код на своих компьютерах ... у вас есть ноль понимание того, что еще работает там. Вы можете обнаружить, что 16 потоков подходят для 50% пользователей. Но остальные, возможно, делают много других вещей на своих машинах, а 16 уже слишком много для них.
И это настоящая суть. Независимо от того, какое число вы считаете «подходящим» для конкретной конфигурации оборудования, вы не можете контролировать другие рабочие нагрузки.
С этой точки зрения я был бы довольно консервативен. Для интенсивной загрузки ЦП «слишком много» потоков в любом случае бесполезно, поэтому в качестве отправной точки следует указать количество процессоров или большее количество ядер.
Кроме того, что может быть действительно полезным здесь: добавьте своего рода «сбор данных» в ваше приложение. Значение: регулярно звонить домой, чтобы сказать вам такие вещи, как: «это оборудование, на котором я работаю, я использую потоки X, а другая рабочая нагрузка в системе - Y». Это может помочь вам перейти к некоторой эвристике, чтобы адаптировать к наиболее важным настройкам пользователя. Но будьте внимательны к , какие данные собирать. Определите вопросы, на которые вы хотите получить предварительный ответ, а затем извлеките данные, необходимые для ответа на эти вопросы.