Это довольно общий вопрос информатики, не относящийся к какой-либо ОС или фреймворку.
Поэтому меня немного смущают накладные расходы, связанные с переключением задач в пуле потоков. Во многих случаях не имеет смысла выделять каждому заданию отдельный поток (мы не хотим создавать слишком много аппаратных потоков), поэтому вместо этого мы помещаем эти задания в задачи, выполнение которых можно запланировать в потоке. Мы настраиваем пул потоков, а затем динамически распределяем задачи для выполнения в потоке, взятом из пула потоков.
Я просто немного запутался (не могу найти подробный ответ) в накладных расходах, связанных с переключением задач в определенном потоке (в пуле потоков). В статье DrDobbs (источник ниже) говорится, что это так, но мне нужен более подробный ответ на то, что на самом деле происходит (источник, который можно цитировать, был бы фантастическим :)).
По определению SomeWork должен быть поставлен в очередь в пуле, а затем запущен в другом потоке, отличном от исходного. Это означает, что мы обязательно несем накладные расходы на очередность плюс переключение контекста только для того, чтобы переместить работу в пул. Если нам нужно передать ответ обратно в исходный поток, например, через сообщение или Future или что-то подобное, мы будем использовать для этого другое переключение контекста.
Источник: http://www.drdobbs.com/parallel/use-thread-pools-correctly-keep-tasks-sh/216500409?pgno=1
Какие компоненты потока на самом деле переключаются? Сам поток на самом деле не переключается, а только данные, относящиеся к потоку. Какие накладные расходы связаны с этим (больше, меньше или столько же)?