Threadpool性能比较:本地与远程

时间:2012-05-22 11:20:20

标签: java multithreading couchdb threadpool

  • 我有两台完全相同的机器(COM1 - COM2),两者都是单核。
  • 两台机器都运行了couchdb和tomcat
  • 我的应用程序通过休息请求查询数据库,我实现了一个10的线程池来加固进程。每个线程都有自己的数据库实例。

  • 当我将我的应用程序设置为使用带有线程池的本地数据库(war文件在COM1中,数据库在COM1中)时,30个查询需要431.83毫秒。没有线程池的相同配置需要823.83毫秒。
  • 但是当我将它设置为使用带有线程池的远程数据库时,(war在COM1中,数据库在COM2中),30个查询需要276.52毫秒。没有线程池的相同配置需要960.00毫秒。

我的问题是:

  1. 当我使用线程池时,为什么我会在单核中增加spead?
  2. 为什么远程数据库配置比本地配置快?
  3. 由于

1 个答案:

答案 0 :(得分:2)

  

为什么我在使用线程池时会增加单核心的速度?

线程并不总是在CPU上运行。有些将从磁盘,网络,内存等读取数据,其他线程可以同时使用CPU。如果你有一个浓缩咖啡机和一个牛奶蒸锅,让两个人一起制作卡布奇诺咖啡的速度比让一个人工作更快。

  

为什么远程数据库配置比本地配置快?

如果您的查询是CPU密集型的,可以想象手头有两个CPU可以获得足够的性能,从而补偿您的网络延迟损失。即如果您的浓缩咖啡制作需要足够的时间,那么即使您必须爬楼梯,也可以在下一层使用浓缩咖啡机。请注意,如果你只有一个人就这样做是没有意义的。这就是为什么你得到960ms而不是823ms(即无用的爬楼梯)。