Objetos CurrentThread / ProcessThread

En .NET BCL, hay un objeto CurrentThread y un ProcessThread. Cuál es la diferencia entre esto?

Gracias

La propiedad estática CurrentThread en la clase System.Threading.Thread es la instancia actual de CLR System.Threading.Thread . El subproceso CLR es una abstracción sobre el subproceso win32 subyacente. La clase System.Diagnostics.ProcessThread proporciona acceso a los subprocesos win32, en gran parte para el seguimiento del rendimiento.

Una distinción clave de los hilos CLR es que no están fijados a los hilos win32.

Es una resaca de un proyecto de SQL Server cuando se estaba diseñando .NET 2.0. Presionaron al equipo CLR realmente duro para romper el vínculo entre la clase de subprocesos .NET y un subproceso del sistema operativo. Tenían razones para hacerlo en ese momento, SQL Server admite subprocesos “ligeros” que se implementan como fibras. Una fibra es la implementación de Windows de una “co-rutina”, algo que fue popular hace unos 15 años.

El proyecto fue un fracaso, no pudieron obtenerlo lo suficientemente confiable. Lamentablemente, no tenemos una manera fácil de asignar un subproceso a un subproceso de proceso. Toda una pérdida. Tal vez alguien, algún día, aprovechará el desacoplamiento, todavía no lo he visto hecho.

La única asignación posible que tiene disponible ahora es P / Invoke GetCurrentThreadId () dentro del propio hilo. Eso devuelve un TID que puede hacer coincidir con un ProcessThread.Id.