我正在編寫一個應用程序,在UDP上偵聽傳入消息。我的主線程收到來自網絡的消息之後的消息,並將它們中的每一個傳遞給使用執行程序進行處理的新線程。多線程性能
每個處理線程都對其負責的消息進行必要的處理,並將其添加到在所有處理線程之間共享的LinkedBlockingQueue
。
然後,我有一個數據庫工作線程,通過10000條消息塊排出隊列,並將消息塊插入到數據庫中。由於郵件到達率可能很高(每秒超過20000條郵件),因此我認爲使用LOAD DATA INFILE
更有效。因此,此DB工作線程如前所述耗盡隊列,創建一個包含使用CSV格式的所有消息的臨時文件,並使用另一個執行程序將創建的文件傳遞給另一個線程。這個新線程使用JDBC
執行LOAD DATA INFILE
聲明。
經過測試我的應用程序後,我認爲性能並不好,我正在尋找提高多線程級別和數據庫訪問級別性能的方法。
我確切的說我使用MySQL作爲DBMS。
謝謝
我只能使用沒有子線程的DB工作線程。在這種情況下,這些文件將通過此DB工作線程一個接一個地寫入數據庫。但我認爲在寫入文件(同步JDBC調用)期間,我可以使用這段時間向數據庫發出另一個文件。你認爲這是不必要的嗎? –
如果不測量每個階段的差異,就不可能知道。即使擁有十二年優化Java程序的經驗,通過衡量系統性能而不是猜測,我感到驚訝。 –
您是否有一些資源讓我瞭解如何衡量多線程應用程序的性能? –