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

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

我的问题是:

  1. 为什么我在使用线程池时单核速度增加?
  2. 为什么远程数据库配置比本地配置快?

谢谢

4

1 回答 1

2

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

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

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

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

于 2012-05-23T14:33:09.633 回答