Поток - это объект ядра? - PullRequest
       1

Поток - это объект ядра?

2 голосов
/ 17 февраля 2012

В этой книге я читал, что каждый экземпляр класса Thread фактически выделяет объект ядра - и это является одним из издержек использования Thread.

Насколько я знаю, поток не является объектом ядра (в данном случае только процесс является объектом ядра. Поток, который содержит процесс, не является объектами ядра?)

Может кто-нибудь объяснить?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Поток - это сначала управляемый объект, вы знаете класс System.Threading.Thread.Затем следует внутренний объект CLR, класс C ++, также называемый Thread.С этим связано довольно большое количество сантехники в стиле айсберга.Эта сантехника, безусловно, использует объекты ядра, пять из них.Что-то, что вы можете увидеть в Taskmgr.exe .Один из них - это дескриптор нативного потока операционной системы, остальные четыре немного загадочны, но, вероятно, являются дескрипторами объекта синхронизации.

Отсоединение Thread от реальных объектов потока Windows в .NET 2.0 довольно печально.Это только технически возможно, никто хорошо известный на самом деле никогда не реализовывал хост CLR, который заставлял его работать.Для команды SQL Server это был важный проект по реализации Thread с волокнами, и они отказались от него.Не могу сделать это достаточно надежным.С тех пор, как я знаю, не судил.

2 голосов
/ 17 февраля 2012

С MSDN об экземплярах Thread:

ThreadId операционной системы не имеет фиксированной связи с управляемым потоком, поскольку неуправляемый хост может контролировать отношения между управляемыми и неуправляемыми потоками. В частности, сложный хост может использовать API-интерфейс хостинга CLR для планирования многих управляемых потоков в одном потоке операционной системы или для перемещения управляемого потока между различными потоками операционной системы.

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

Итак, я понимаю, что нет, потоки .NET не обязательно содержат объекты ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...