2011-06-01 208 views
3

我有一種情況,將有500個併發連接到服務器。就響應時間而言,哪種方法更快? (異步或同步)背後的原因是什麼?異步vs同步套接字

我知道異步套接字就像是一個連接列表,那麼它會詢問每個連接,你有什麼需要發送或接收。如果列表很長,那麼響應時間可能也會更長。它是否正確?

+0

你在什麼操作系統上?什麼編程語言?你如何實現同步/異步套接字?單線程或多線程?如果MT,線程是如何處理的?如果不知道,就不可能回答這個問題。 – 2011-06-01 11:14:19

+0

嗨安德斯。我使用.Net來編寫套接字服務器。我使用BeginReceive/EndReceive方法完成了異步套接字。但在我的測試中,當服務器有大約500個活動連接時,響應時間變慢。所以我想知道會同步方法更敏感。 – kevin 2011-06-02 07:08:55

+0

這樣的東西,「在500下降」,提供了重要的上下文。你應該在問題中指出這一點。 – 2011-06-02 22:30:58

回答

3

如果使用同步套接字,則500個連接將需要500個線程。餿主意。這些許多線程的調度成本將超過500個異步套接字的開銷。

順便說一句,你不會在每個套接字上循環,詢問它是否準備好傳輸。您使用異步API,如select()或I/O完成端口。

+0

如果它不會超過500個連接。每個連接上的專用線程會更敏感嗎? – kevin 2011-06-02 07:17:06

+0

異步API的速度應該只有10個併發連接。作爲一般規則,您應該生成與CPU核一樣多的線程,並在每個線程中使用異步I/O。 – 2011-06-02 22:29:20

2

異步套接字將工作得更好。他們在內部使用IOCP,這是處理掛起的IO操作的非常有效的方法。

如果您有幾個套接字,請使用線程,因爲它是更容易。否則堅持使用異步套接字。