全双工服务器远比你想象的复杂,典型的游戏服务器,有成千上万的客户端接入。
每一个accept的客户端,创建一个与socket关联的task,在系统中注册,一个新玩家。
随后这个task被丢进M:N的调度器,如epoll,准备接收它的信息。这个task不可以向自己的socket发送信息,因为别人也可以发,会打架。
如果需要发信息,把task+信息发送到一个队列,有一个线程守候这个队列,收到一个信息就把它发到对应的socket。
如果觉得吞吐量不够需要多加线程的话,需要考虑一个socket不能同时两个操作,搞点锁呀排队呀什么的。
在release task时,必须要考虑是否还在被使用。
所以我的问题是,什么东西可以搞M:N调度器,IOCP行吗?
据我所知,还有bsd的kqueue,线程条件锁。
【 在 hgoldfish 的大作中提到: 】
: 这种场景是 IO 非常大的时候用的?
: 线程1: 读数据, 处理数据, 读数据, 处理数据
: 线程2: 写数据, 准备数据, 写数据,准备数据
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*