我們公司正在運行Java應用程序(在單個CPU Windows服務器上)從TCP/IP套接字讀取數據並檢查特定條件(使用正則表達式),如果找到匹配,則將數據存儲在MySQL數據庫。數據是巨大的,並且以800個記錄/秒的速率讀取,並且大約70%的記錄將是匹配的記錄,所以涉及很多數據庫寫入。該程序正在使用LinkedBlockingQueue來處理數據。生產者類只是讀取記錄並將其放入隊列中,並且消費者類從隊列中移除並執行處理。在我的場景中,單個Java線程比多線程更好嗎?
所以問題是:如果我使用多個消費者線程而不是單個線程,它會有所幫助嗎?在上述場景中線程是否真的有幫助(因爲我使用單個CPU)?我正在尋找關於如何加速的建議(無需更改硬件)。
任何建議將非常感激。謝謝
核心數量僅與具有大量cpu綁定應用程序的線程數量相關。我會說絕大多數應用程序不是。 – CurtainDog 2010-08-18 04:39:58
爲什麼'LinkedBlockingQueue'?數據是否必須按順序存儲在數據庫中? – 2010-08-18 04:42:43
我認爲你需要在修改應用程序之前對其進行配置。您必須計算IO(網絡數據到達)和CPU的百分比利用率。將cpu的數據分批處理是另一種可能的優化。但真正的問題是你真的有性能問題? – questzen 2010-08-18 06:53:07