.NET C#Socket并发问题

时间:2009-08-26 19:53:56

标签: c# .net multithreading sockets thread-safety

System.Net.Sockets.Socket

的一个实例

可以由2个线程共享,所以一个使用send()方法而另一个使用receive()方法?

安全吗?

好吧,我需要它不仅是线程安全的,而且发送/接收方法是非同步的,以便让每个线程同时调用它们。

我还有其他办法吗?

感谢您的帮助,我在java方面经验丰富,但很难尝试制作这个。

3 个答案:

答案 0 :(得分:6)

它应该是安全的,是的。 Socket类由MSDN to be fully thread-safe引用。

但我不知道这是不是一个好主意。您可能通过使用两个线程使自己变得困难。对于异步版本,您可能希望查看BeginSendBeginReceive,在这种情况下,您不需要多个线程。

答案 1 :(得分:2)

是的,同时访问发送和从两个不同的线程接收是完全安全的。

如果您希望应用程序扩展到100个活动套接字,那么您将需要使用BeginReceiveve / BeginSend方法而不是手动创建线程。这将在幕后做魔术,这样你就不会产生100个线程来处理套接字。它究竟是做什么的,取决于平台。在Windows上,您将使用“高性能”io完成端口。在linux(单声道)下你会使用epoll我相信。无论哪种方式,你最终会使用比活动套接字少得多的线程,这总是一件好事:)

答案 2 :(得分:2)

很少偏离主题,但使用de sync方法仅在您拥有有限客户端时才有用。我发现异步套接字响应速度较慢。处理许多客户端时,异步套接字更好。

所以:   同步更快。   async更具可扩展性