2010-04-15 34 views
3

我正在使用java.nio api編寫網絡應用程序。我的計劃是在一個線程上執行I/O,並在另一個線程上處理事件。要做到這一點,我需要同步讀/寫,以便從未滿足競爭條件。同步費用是多少?

銘記我需要處理成千上萬的併發連接,是同步值得的,或者我應該使用一個線程用於I/O和事件處理?

+0

這是一個非常普遍的問題。這在很大程度上取決於您如何使用同步。很明顯,同步比不昂貴,但是...如果你需要它,你需要它。 – 2010-04-15 16:19:33

+0

願意付多少錢? ;-) – mjv 2010-04-15 16:20:58

回答

3

你在做什麼樣的事件處理?可能的瓶頸在哪裏?你甚至有瓶頸嗎?

先從最簡單的實現和優化掉的瓶頸,一旦你認識他們。

如果你發現你的網絡IO線程沒有閱讀速度不夠快,因爲它花費太多時間處理事件,然後做一個緩衝隊列,同步到這一點,必須通過隊列中的事件處理線程的工作。

您可能需要設置隊列的大小有限制,所以你最終不會運行內存,雖然。如果網絡線程即將溢出隊列,請等待,直到有更多空間。

不成熟的優化對任何人都不好玩。

然而,要回答你的問題,兩個線程之間的同步也不太可能會成爲一個瓶頸,你不應該擔心它的開銷。

+0

@Ben:我想你的意思是「**不應該擔心它的開銷」 – 2010-04-15 16:24:42

+0

是的,抱歉,現在修復。 – 2010-04-15 16:26:16

+0

我想解耦讀/寫和事件處理,但如果同步過於昂貴,我認爲它不值得。 想象一下,每秒同步數千次;會導致太多的壓力? – someguy 2010-04-15 16:29:08

0

我認爲它的效率將取決於同步部分的精細程度是。