2 votes

Thread est-il un objet du noyau ?

Dans ce livre, je lis que chaque instance de la Thread alloue en fait un objet du noyau - et c'est l'une des surcharges de l'utilisation de la classe Thread .

Pour autant que je sache, le thread n'est pas un objet du noyau (seul le processus est un objet du noyau dans ce cas). Les fils que le processus contient ne sont pas des objets du noyau).

Quelqu'un peut-il expliquer ?

3voto

Hans Passant Points 475940

Thread est d'abord un objet géré, vous connaissez la classe System.Threading.Thread. C'est ensuite un objet interne du CLR, une classe C++ également nommée Thread. Il y a plutôt une quantité massive de plomberie impliquée avec lui, style iceberg. Cette plomberie utilise certainement des objets du noyau, cinq d'entre eux. Quelque chose que vous pouvez voir dans Taskmgr.exe . L'un d'entre eux est le gestionnaire de threads natif du système d'exploitation, les quatre autres sont un peu mystérieux mais sont probablement des gestionnaires d'objets de synchronisation.

Le découplage de Thread avec les objets threads réels de Windows dans .NET 2.0 est assez infâme. C'est seulement techniquement possible, mais personne de connu n'a jamais implémenté un hôte CLR pour le faire fonctionner. C'était un projet important pour l'équipe SQL Server de mettre en œuvre Thread avec des fibres et ils ont abandonné. Ils n'ont pas réussi à le rendre suffisamment fiable. Cela n'a pas été essayé depuis, à ma connaissance.

2voto

Christian Horsdal Points 2481

En MSDN sur les instances de Thread :

Un ThreadId du système d'exploitation n'a pas de relation fixe avec un thread géré, car un hôte non géré peut contrôler la relation entre les threads gérés et non gérés. Plus précisément, un hôte sophistiqué peut utiliser l'API d'hébergement CLR pour planifier de nombreux threads gérés par rapport au même thread du système d'exploitation, ou pour déplacer un thread géré entre différents threads du système d'exploitation.

Il existe également d'autres types de threads ou de choses semblables à des threads dans .NET. Il y a les threads du ThreadPool et les Tasks. Aucun d'entre eux n'est directement lié aux threads du système d'exploitation (AFAIK).

En résumé, si j'ai bien compris, les threads .NET ne contiennent pas nécessairement des objets du noyau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X