java

位置:IT落伍者 >> java >> 浏览文章

超线程多核心下Java多线程编程技术分析[4]


发布日期:2023年08月06日
 
超线程多核心下Java多线程编程技术分析[4]

使用线程池

如前所提及在线程完成执行时它们将被JVM杀死而分配给它们的内存将被垃圾回收机制所回收不断地创建和毁灭线程所带来的麻烦是它浪费了时钟周期因为创建线程确实耗费额外的时间一个通用的且最好的实现是在程序运行的早期就分配一组线程(称为一个线程池)然后在这些线程可用时再使用它们通过使用这种方案在创建时分配给一个线程指定的功能就是呆在线程池中并且等待分配一项工作然后当分配的工作完成时该线程被返回到线程池

JSE 引入了javautilconcurrent包它包括了一个预先构建的线程池框架这大大便利了上述方法的实现有关Java线程池的更多信息及一部教程

在设计线程程序和线程池时自然出现关于应该创建多少线程的问题答案看你怎样计划使用这些线程如果你基于分离的任务来用线程划分工作那么线程的数目等于任务的数目例如一个字处理器可能使用一个线程用于显示(在几乎所有系统中的主程序线程负责更新用户接口)一个用于标记文档第三个用于拼写检查而第四个用于其它后台操作在这种情况中创建四个线程是理想的并且它们提供了编写该类软件的一个很自然的方法

然而如果程序象早些时候所讨论的那个一样使用多个线程来做类似的工作那么线程的最佳数目将是系统资源的反映特别是处理器上可执行管道的数目和处理器的数目的反映在采用英特尔处理器超线程技术(HT技术)的系统上当前在每个处理器核心上有两个执行管道最新的多核心处理器在每个芯片上有两个处理器核心英特尔指出将来的芯片有可能具有多个核心大部分是因为额外的核心会带来更高的性能而不会从根本上增加热量或电量的消耗因此管道数将会越来越多

照上面这些体系结构所作的算术建议在一个双核心Pentium 处理器系统上可以使用四条执行管道并因此可以使用四个线程将会提供理想的性能在一个双处理器英特尔Xeon?处理器的工作站上理想的线程数目是因为目前Xeon芯片提供HT技术但是没提供多核心模型你可以参考下面文档来了解这些新型处理器上的执行管道的数目

小结

你当在平台上运行线程化的Java程序时你将可能想要监控在处理器上的加载过程与线程的执行最好的获得这些数据与管理JVM怎样处理并行处理的JVM之一是BEA的WebLogic JRockitJRockit还有其它一些由来自于BEA和Intel公司的工程师专门为Intel平台设计和优化的优点

不考虑你使用哪一种JVMIntel的VTune Performance Analyzer将会给你一个关于JVM怎样执行你的代码的很深入的视图这包括每个线程的性能瓶颈等另外Intel还提供了关于如何在Java环境下使用VTune Performance Analyzer的白皮书[PDF MB]

总之本文提供了线程在Java平台工作机理的分析由于Intel还将继续生产HT技术的处理器并且发行更多的多核心芯片所以想从这些多管道中得到性能效益的压力也会增加并且由于核心芯片数目的增加管道的数目也将相应地增加唯一的利用它们的优点的办法就是使用多线程技术如在本文中所讨论的并且Java多线程程序的优势也越来越明显

[] [] [] []

               

上一篇:Java多线程Socket操作猜数游戏样例[1]

下一篇:超线程多核心下Java多线程编程技术分析[3]