1. 程式人生 > >關於Socket通訊中多個執行緒同時向一個服務埠傳送資料時的注意點

關於Socket通訊中多個執行緒同時向一個服務埠傳送資料時的注意點

近幾天在開發的程式裡面有相關模組使用到了Socket通訊,其中存在多個類似功能的模組,這些模組可能出現在同一時間段向一個服務端埠傳送訊息的情況,剛開始使用一個socket去通訊,結果發現異常頻繁出現.(事實上,當傳送間隔很長,比如每200ms才會有一次傳送,那麼兩個執行緒之間衝突的機會很小,基本上不會衝突.但是不衝突就不代表問題不存在,當傳送間隔縮小到20ms時,異常發生的機率就非常大了,因此不管服務端的接收效率如何,我要做的都是儘可能的提升客戶端的效能)

在排除了執行緒鎖問題後,發現了問題在於,當多個執行緒同時進行Socket通訊時,如果只為他們開了一個Socket且公用,勢必造成資源衝突,因此最好為每一個執行緒都開一個Socket,避免相互之間產生衝突.這樣做有效提高了傳送效率,也不會再報異常.