关于socket异步通信,是多线程吗

搬瓦工机场JMS

用的c#做的,是系统自动多线程,还是需要手工开多线程。

重庆网友:C#应该和nodejs java差不多 ,本质一个线程就够了,如果有netty之类的框架,会有接受线程组和工作线程组,但是你具体实现的时候,基本不用关心线程问题,更不要自己去手动开线程。
西藏网友:具体查看API文档。
江苏网友:如果是async的话,不能算多线程吧,应该叫委托事件触发回调
河南网友:c#的话应该是windows平台吧
简单说一说,win下socket通信主要有几个:
阻塞模式:简单说就是send和recv函数会堵住,send的时候需要对方recv函数才能执行完,不然会一直堵。
非阻塞模式: 前面的recv不在阻塞,而是返回一个错误值。
重叠模型:使用wsaRecv,可以为overlappd指定一个事件,接收到数据的话系统将自动触发此事件。使用waitmulitxxx函数可以最多等待64个事件。
完成例程:使用wsaRecv,可以为overlappd指定一个回调函数,接收到数据自动执行回调函数,可以在回调里面做数据处理。
完成端口:内核对象,可以指定n个工作线程,将socket绑定到完成端口,接收数据内核自动调用工作线程处理。性能最高,4h笔记本轻松上万客户端。

你说的异步通信,是多线程吗?是的
阻塞模式,每一个客户端需要一个接收线程,因为recv会阻塞。
非阻塞模式,n个客户端可以指定一个接收线程轮询,但轮询遍历效率不高。
重叠模型,需要有一个线程来等待事件,waitmuiltxxx函数最多等待64个事件,即一个线程最多64个客户端。
完成例程,回调函数处理,但是在执行回调的时候会打断当前线程去执行回调。
完成端口,工作线程处理,应该是所有操作系统性能最高的高并发实现了。

黑龙江网友:肯定是要自己写多线程啊…..
甘肃网友:是多线程的,等待时cpu切换做别的任务,回调时继续
吉林网友:你是手写tcpsocket还是SocketAsyncEventArgs?

未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » 关于socket异步通信,是多线程吗

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏