Работает ли код в .NET Task в конечном итоге на ЦП или ЦП с помощью собственного потока Windows? [Дубликат]

2

Обращаясь к следующему посту, который заставляет поверить, что задача .NET выполняется без участия собственных потоков ОС. Это правда?

Разница между задачей (System.Threading.Task) и потоком

РЕДАКТИРОВАТЬ

При рассмотрении повторяющихся вопросов я не смог найти ответ, непосредственно касающийся вопроса о том, что создание экземпляра класса .NET Task в конечном итоге будет выполнено в собственном потоке ОС. Они относятся к потокам, но не различают управляемые и собственные потоки ОС или просто управляемые потоки. Единственное, что может быть дубликатом, - это мой собственный ответ на один из этих вопросов.

Но, копаясь в себе, казалось бы, что в ".NET" нет "магии", позволяющей избежать нативных потоков ОС. В ядре Windows нет изменений, позволяющих это сделать. Это согласуется с моим собственным опытом ОС пару десятилетий назад. Короче говоря, нет ни одного кода приложения, который кто-либо может написать, который не работает в собственном потоке ОС Windows.

О процессах и потоках Управляемый поток

Также:

Внутренняя архитектура процесса ядра Windows

Архитектура ядра Windows

Эволюция архитектуры ядра Windows

Показать ещё 1 комментарий
Теги:
multithreading
task
task-parallel-library

1 ответ

5

Ответ: это зависит.

Задачи, которые включают некоторую вычислительную работу, выполняются в потоке, и обычно это будет поток из пула потоков.

Долгосрочные задачи, т. TaskCreationOptions.LongRunning Созданные с помощью параметра TaskCreationOptions.LongRunning запускаются в выделенном потоке, который создается для них.

Задачи ввода/вывода, такие как await stream.ReadAsync() вообще не имеет потока. Операция отправляется на устройство ввода-вывода, и процессор может делать все, что пожелает. Только когда устройство готово с запрошенными данными, оно прерывает ЦП, выполняет некоторую низкоуровневую обработку, и в конечном итоге ОС получает поток из пула потоков, чтобы выполнить задачу и сделать результат доступным для вашей программы. Подробнее здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню