System.Net.Sockets.Socket
的一个实例可以由2个线程共享,所以一个使用send()方法而另一个使用receive()方法?
安全吗?
好吧,我需要它不仅是线程安全的,而且发送/接收方法是非同步的,以便让每个线程同时调用它们。
我还有其他办法吗?
感谢您的帮助,我在java方面经验丰富,但很难尝试制作这个。
答案 0 :(得分:6)
它应该是安全的,是的。 Socket类由MSDN to be fully thread-safe引用。
但我不知道这是不是一个好主意。您可能通过使用两个线程使自己变得困难。对于异步版本,您可能希望查看BeginSend
和BeginReceive
,在这种情况下,您不需要多个线程。
答案 1 :(得分:2)
是的,同时访问发送和从两个不同的线程接收是完全安全的。
如果您希望应用程序扩展到100个活动套接字,那么您将需要使用BeginReceiveve / BeginSend方法而不是手动创建线程。这将在幕后做魔术,这样你就不会产生100个线程来处理套接字。它究竟是做什么的,取决于平台。在Windows上,您将使用“高性能”io完成端口。在linux(单声道)下你会使用epoll我相信。无论哪种方式,你最终会使用比活动套接字少得多的线程,这总是一件好事:)
答案 2 :(得分:2)
很少偏离主题,但使用de sync方法仅在您拥有有限客户端时才有用。我发现异步套接字响应速度较慢。处理许多客户端时,异步套接字更好。
所以: 同步更快。 async更具可扩展性