任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。在文章结尾有相关代码的下载。
以上所描述的线程池结构很简单,一些复杂的线程池结构将不再此讨论。
在下载代码中有测试驱动程序(TestThreadPool),我利用这个测试程序的输出数据统计出下列测试结果。测试有两个参数要设置:
线程池中线程数,即线程池尺寸。
要完成的任务数。
分别将一个参数固定,另一个参数变动以考察两个参数所产生的不同结果。所用测试机器分别为普通PC机(Win2000 JDK1.3.1)和SUN服务器(Solaris Unix JDK1.3.1),机器配置在此不便指明。
表1:测试数据及对应结果 线程池尺寸任务数没有应用线程池所用的时间(单位:毫秒,OS:win)应用线程池所用的时间(单位:毫秒,OS:win)没有应用线程池所用的时间(单位:毫秒,OS:Solaris)应用线程池所用的时间(单位:毫秒,OS:Solaris)1 5000 3896 130 6513 327
2 5000 3455 151 6221 659
4 5000 3425 120 5448 433
8 5000 3475 160 5769 1478
16 5000 3505 211 5785 1970
32 5000 3455 251 6403 875
64 5000 3595 501 5182 1103
128 5000 3515 881 5154 405
256 5000 3495 3104 5502 1589
512 5000 3425 5488 5667 1262
16 1 20 0 22 3
16 2 20 20 21 13
16 4 20 10 27 10
16 8 20 20 22 24
16 16 30 20 29 48
16 32 40 20 46 108
16 64 60 20 72 199
16 128 110 20 148 335
16 256 201 20 252 132
16 512 411 40 522 382
16 1024 811 71 1233 610
16 2048 1552 80 2045 135
16 4096 2874 250 4828 787
图1.线程池的尺寸的对服务器程序的性能影响
根据以上统计数据可得出下图:
图2.任务数对服务器程序的冲击数据分析如下: