2014-07-12 33 views
5

Ho letto alcuni segmenti sul pool di thread di finestre. Sembra pool di thread CLR.qual è la differenza tra pool di thread di Windows e pool di thread CLR

CLR è basato su Windows, quindi il thread CLR si basa sul pool di thread di Windows, è corretto?

So che ogni processo .net ha un pool di thread, qual è la situazione nel pool di thread di Windows? Il sistema operativo ha un pool di thread o molti?

In C#, lo sviluppatore può controllare il pool di thread della finestra in base al codice?

+3

Quando si chiede qualcosa che si legge, includere un collegamento (o almeno un nome di pubblicazione). –

risposta

13

È una di quelle domande di implementazione CLR che non hanno una risposta diretta. Non è compito del CLR determinare come viene implementato il ThreadPool. È il lavoro dell'host CLR. Uno strato di software che integra il CLR con il sistema operativo. L'interfaccia di base utilizzata dal CLR per ottenere le attività thread-pool è IHostThreadPoolManager. È un'interfaccia COM non gestita, ma non avrai problemi a riconoscere il mapping quasi one-to-one con i membri della classe ThreadPool.

Ci sono molte implementazioni dell'host CLR. Quelli più riconoscibili sono l'host CLR predefinito per le app desktop, implementato da mscoree.dll. Ci sono diverse versioni di esso per diverse versioni di Windows. E ASP.NET, Sql Server, il processo di hosting di Visual Studio, l'host personalizzato per Silverlight, Windows Phone, XBox. E quelli meno riconoscibili, le grandi app non gestite possono ospitare gli stessi CLR per supportare lo scripting implementato in un linguaggio .NET. Programmi CAD come AutoCAD ecc sono esempi standard.

La nozione principale di un thread è virtualizzata nel CLR. IClrTask e IClrTaskManager sono le interfacce di hosting per questo. Che consente a un host di implementare un thread su qualcosa di diverso da un thread del sistema operativo. Come una fibra Nessuno lo fa davvero.

Certo, Windows ha la propria API per un threadpool. La funzione winapi CreateThreadPool() ottiene la rotazione della palla. Tuttavia, spiando i file mscor * .dll sulla mia macchina con dumpbin.exe/import, non vedo che venga usato. Almeno una parte del problema potrebbe essere che CreateThreadPool() è una funzione winapi successiva, disponibile solo da Vista. XP e versioni precedenti di Windows avevano un'implementazione molto più semplice. Quindi, no, almeno per la versione desktop di .NET 4.5.2, il threadpool di Windows non sembra rilevante.