25.6 CLR Threads and Windows Threads . CLR线程和windows线程
今天,CLR使用的是Windows的线程处理能力,所以本章第V部分实际着眼于由Windows 向开发人员公开的线程处理能力。我将解释线程在Windows中是如何工作,以及CLR如何改变线程的行为(如果能的话)。然而,如果你想更多地学习线程,建议阅读我以前就这个主题出版的一些著作,比如我的《Windows via C/C++》一书(Microsoft Press,2007)。
尽管今天的一个CLR线程是直接映射到一个Windows线程上,但微软CLR团队保留了将来把它从Windows线程分离的权利。有一天,CLR 可能引入它自己的逻辑线程概念,使一个CLR 逻辑线程并非一定映射到一个物理Windows 线程。据说,逻辑线程将使用比物理线程少得多的资源,所以能在极少量的物理线程上运行大量逻辑线程。例如,CLR可以判断你的一个线程处于等待状态,重新分配那个线程去做一个不同的任务。这个方案的好处在于:编码更简单、使用的资源更少以及潜在的性能提升。遗憾的是,要想真正实现这个方案,CLR团队还有大量工作要做,所以近期不太可能看到CLR推出这个功能。
对你来说,这一切意味着在操纵线程时,代码应尽可能少地做出一些假设。例如,应避免P/Invoke成本地Windows函数,因为这些函数对CLR线程一无所知。通过避免使用本地Windows 函数,坚持使用FCL(Framework类库)中的类型,将来在性能得到提升之后,你的代码马上就能享受到这种提升。