2012-05-22 72 views
1
  • 我有2個完全相同的機器(COM1-COM2),都是單核。
  • 兩臺機器都運行couchdb和tomcat
  • 我的應用程序通過其餘請求查詢數據庫,並且我實現了一個10的線程池來加速進程。每個線程都有自己的數據庫實例。

  • 當我把我的應用程序與線程池使用本地數據庫(war文件是在COM1,數據庫是COM1),30個查詢花費431.83毫秒。沒有線程池的相同配置需要823.83毫秒。
  • 但是,當我將它設置爲使用帶有線程池的遠程數據庫(戰爭在COM1中,數據庫在COM2中)時,30個查詢耗時276.52毫秒。沒有線程池的同樣配置需要960.00毫秒。

我的問題是:線程池性能比較:本地vs遠程

  1. 爲什麼我收到spead增加單核,當我使用線程池?
  2. 爲什麼遠程數據庫配置比本地數據庫更快?

感謝

回答

2

爲什麼我得到的單核spead增長,當我使用線程池?

線程並不總是在CPU上做東西。有些將從磁盤,網絡,內存等中讀取數據,其他線程可以同時使用CPU。如果你有一家濃縮咖啡機和一臺蒸牛奶機,讓兩個人共同製作卡布奇諾咖啡將比一個人工作更快。

爲什麼遠程數據庫配置比本地速度快?

如果您的查詢是CPU密集型的,可以想象擁有兩個CPU即可獲得足夠的性能,從而彌補網絡延遲的損失。即如果您的咖啡製作需要足夠的時間,那麼即使您需要爬樓梯,在下一層使用濃縮咖啡機也是有意義的。請注意,如果你只有一個人,這樣做是沒有意義的。這就是爲什麼你得到960ms而不是823ms的設置(即無用的樓梯攀爬)。