全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 722|回复: 7

[Windows VPS] 关于socket异步通信,是多线程吗

[复制链接]
发表于 2019-7-29 11:55:54 | 显示全部楼层 |阅读模式
用的c#做的,是系统自动多线程,还是需要手工开多线程。

发表于 2019-7-29 12:12:43 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2019-7-29 15:19:00 | 显示全部楼层
具体查看API文档。
发表于 2019-7-29 15:21:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2019-7-29 15:59:44 | 显示全部楼层
c#的话应该是windows平台吧
简单说一说,win下socket通信主要有几个:
阻塞模式:简单说就是send和recv函数会堵住,send的时候需要对方recv函数才能执行完,不然会一直堵。
非阻塞模式: 前面的recv不在阻塞,而是返回一个错误值。
重叠模型:使用wsaRecv,可以为overlappd指定一个事件,接收到数据的话系统将自动触发此事件。使用waitmulitxxx函数可以最多等待64个事件。
完成例程:使用wsaRecv,可以为overlappd指定一个回调函数,接收到数据自动执行回调函数,可以在回调里面做数据处理。
完成端口:内核对象,可以指定n个工作线程,将socket绑定到完成端口,接收数据内核自动调用工作线程处理。性能最高,4h笔记本轻松上万客户端。

你说的异步通信,是多线程吗?是的
阻塞模式,每一个客户端需要一个接收线程,因为recv会阻塞。
非阻塞模式,n个客户端可以指定一个接收线程轮询,但轮询遍历效率不高。
重叠模型,需要有一个线程来等待事件,waitmuiltxxx函数最多等待64个事件,即一个线程最多64个客户端。
完成例程,回调函数处理,但是在执行回调的时候会打断当前线程去执行回调。
完成端口,工作线程处理,应该是所有操作系统性能最高的高并发实现了。
发表于 2019-7-29 16:25:20 | 显示全部楼层
肯定是要自己写多线程啊.....
发表于 2019-7-29 19:52:22 | 显示全部楼层
是多线程的,等待时cpu切换做别的任务,回调时继续
发表于 2019-7-29 20:01:03 | 显示全部楼层
你是手写tcpsocket还是SocketAsyncEventArgs?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-3-28 21:38 , Processed in 0.063370 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表