CLR_via_C#.3rd 翻译[25.6 CLR线程和windows线程]
2010-09-07 20:04
232 查看
[b]25.6 CLR Threads and Windows Threads . CLR线程和windows线程[/b]
今天,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类库)中的类型,将来在性能得到提升之后,你的代码马上就能享受到这种提升。
今天,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类库)中的类型,将来在性能得到提升之后,你的代码马上就能享受到这种提升。
相关文章推荐
- CLR_via_C#.3rd 翻译[25.1 为什么Windows支持线程]
- CLR_via_C#.3rd 翻译[25.2 线程开销 ]
- CLR_via_C#.3rd 翻译[25.8 使用线程的理由]
- CLR_via_C#.3rd 翻译[25.7 使用专用线程执行异步的计算限制操作]
- CLR_via_C#.3rd 翻译[1.8 通用语言规范]
- CLR_via_C#.3rd 翻译[1.9 与非托管代码的操作]
- CLR_via_C#.3rd 翻译[25.5 NUMA架构]
- CLR_via_C#.3rd 翻译[25.4 CPU趋势 ]
- CLR_via_C#.3rd 翻译[1.4.1 IL与验证]
- CLR_via_C#.3rd 翻译[1.4.2 不安全代码]
- CLR_via_C#.3rd 翻译[1.2将托管模块组合到集]
- CLR_via_C#.3rd 翻译[1.3加载CLR]
- CLR_via_C#.3rd 翻译[1.4执行程序集代码]
- CLR_via_C#.3rd 翻译[1.6 框架类库]
- CLR_via_C#.3rd 翻译[1.1将源文件编译为托管模块]
- CLR_via_C#.3rd 翻译[1.5 本地代码生成工具NGen.exe]
- CLR_via_C#.3rd 翻译[1.7 通用类型系统]
- CLR_via_C#.3rd 翻译(OneDayOnePiece)
- CLR_via_C#.3rd 翻译[25.3 停止疯狂 ]
- CLR_via_C#.3rd 翻译[25.9 线程调度和优先权]