2013-10-20 16 views
8

Voglio sapere se la creazione di un thread gestito in .Net (chiamando Thread.Start()) fa sì che esattamente un thread nativo venga creato in background? Quindi c'è un thread nativo corrispondente per un thread gestito? Se sì, quando un thread gestito attende o dorme, significa che anche il thread nativo corrispondente attende o dorme?Ogni thread gestito ha il proprio thread nativo corrispondente?

+0

Perché pensi che sia un thread diverso? –

+1

@BlackFrog: È una domanda legittima. Perché qualcuno dovrebbe preoccuparsi di distinguere tra "thread gestito" e "thread nativo" se i due erano sempre * garantiti * per essere la stessa cosa in primo luogo? Il PO non ha creato questa distinzione; [Microsoft ha fatto] (http://msdn.microsoft.com/en-us/library/74169f59.aspx "articolo MSDN" Threading gestito e non gestito in Windows ""). – stakx

risposta

10

Sì, un thread .NET esegue il mapping a un thread del sistema operativo nativo su tutti gli host CLR correnti.

C'è un'opzione per associarlo a qualcos'altro nella API di hosting tramite il ICLRTaskManager interface, come una fibra, ma che non è effettivamente implementato in nessuno degli host dello stream principale. Il team di SQL Server nel time frame .NET 2.0 ha tentato di farlo ma il progetto è stato abbandonato quando non è riuscito a renderlo sufficientemente affidabile. Questo non è stato provato di nuovo. Tecnicamente è possibile imbattersi in un CLR ospitato personalizzato, avviato da un programma non gestito, che ha implementato questa mappatura ma le probabilità sono piuttosto basse.

Problemi correlati