请问在多线程中使用同步Socket和异步Socket的区别

夏夜花花的太阳 2015-12-10 03:13:55
请问在多线程中使用同步Socket和异步Socket的区别。
我的项目是通过Wifi和大约50台左右的设备进行通信,原先用的是多线程中使用同步Socket的方式进行通信,每个设备对应一个线程,线程内进行Socket收发操作,但设备一多就会出现通信阻塞的情况,导致部分设备无法及时发送数据。
然后同事告诉我用异步Socket会改善很多,所以我去了解了下异步Socket,也知道该如何实现异步Socket通信,但是在了解的过程中也看到有说使用多线程同步Socket比异步Socket好,所以想问下究竟两者在使用上有什么区别,以及我这种情况用同步好还是异步好?

字码的有点多,请大家耐心看,帮帮我哈
...全文
280 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lamuna 2015-12-10
  • 打赏
  • 举报
回复
引用 2 楼 u013104783 的回复:
[quote=引用 1 楼 bdmh 的回复:] 既然在多线程中,那么阻塞式Socket可以的,就是没有收到信息,就一直等着,非阻塞就是不管有没有数据,不等到,继续往下,这样你就要判断是否有数据读出来,没有就别处理
哦哦,如果我不希望因为有一台设备无法收到数据而影响其它设备,但是单台设备希望能在收到数据后再发送下一个取数据请求,用哪种方式会比较好丫?[/quote] 用线程等待?…… private static AutoResetEvent waiting = new AutoResetEvent(false); class YourClass{ //////.... static void Main(){ Thread Th = new Thread(new ThreadStart(Foo)); Th.start(); wait.WaitOne(); //... } void Foo(){ ///... wait.Set() } } 我的理解是多线程容易无序……数据处理完毕前程序逻辑一旦没了,不论是否运行完毕程序都会停止,所以需要等待……
qbilbo 2015-12-10
  • 打赏
  • 举报
回复
多线程同步模式: 饭店里的包厢,每个包厢配一名服务员。服务员在点完菜到上菜前,上菜后到吃完前基本上无所事事。人力资源浪费严重。 异步模式: 饭店里的大厅, 服务员与桌子不绑定,每当客人有需要帮助时,空着的服务员就去服务。桌子越多,这种模式效率越高。 客户端,只连接1,2个服务端时,可以使用多线程同步模式。 服务端,异步模式是不二选择。
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
既然在多线程中,那么阻塞式Socket可以的,就是没有收到信息,就一直等着,非阻塞就是不管有没有数据,不等到,继续往下,这样你就要判断是否有数据读出来,没有就别处理
哦哦,如果我不希望因为有一台设备无法收到数据而影响其它设备,但是单台设备希望能在收到数据后再发送下一个取数据请求,用哪种方式会比较好丫?
bdmh 2015-12-10
  • 打赏
  • 举报
回复
既然在多线程中,那么阻塞式Socket可以的,就是没有收到信息,就一直等着,非阻塞就是不管有没有数据,不等到,继续往下,这样你就要判断是否有数据读出来,没有就别处理

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧