2011-06-01 172 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操作的非常有效的方法。

如果您有几个套接字,请使用线程,因为它是更容易。否则坚持使用异步套接字。