iocp中工作线程急需考虑线程互斥吗
iocp中工作线程需要考虑线程互斥吗?
如果有多个线程,那么在处理分包的情况下,多个线程之间是否需要考虑互斥,已保证接收数据的正确性呢?如果有很多客户端都链接iocp服务器,那么是否要考虑互斥控制呢?
------解决方案--------------------
我做过一个server项目,一个迎接线程,2n+1个处理线程(n=cpu数),其中不用做什么互斥,除非有共享数据比如处理结束到某个map,要对map做操作锁处理,因为通知都是windows发出的,线程只要WaitObject就可以了
------解决方案--------------------
系统告诉你的不用互斥.IOCP处理好啦.只是你自己数据处理这块需要互斥
------解决方案--------------------
如果有分包,但是在一个socket上提供一个wsarecv和wsasend,就不要对工作者线程进行挥斥。
如果多余一个,就需要。
------解决方案--------------------
逻辑上在处理数据时,可能共享读写的,肯定需要考虑互斥;但如果你只是做成一个echo的话,就可以省了,不过实际应用几乎没有echo形式的。。。
------解决方案--------------------
嗯。说白了,只需关心数据的同步问题。其它方面无需操心;
当然了,如果lz是做基于tcp协议的网络操作,必须考虑数据包的粘包等问题。
如果有多个线程,那么在处理分包的情况下,多个线程之间是否需要考虑互斥,已保证接收数据的正确性呢?如果有很多客户端都链接iocp服务器,那么是否要考虑互斥控制呢?
------解决方案--------------------
我做过一个server项目,一个迎接线程,2n+1个处理线程(n=cpu数),其中不用做什么互斥,除非有共享数据比如处理结束到某个map,要对map做操作锁处理,因为通知都是windows发出的,线程只要WaitObject就可以了
------解决方案--------------------
系统告诉你的不用互斥.IOCP处理好啦.只是你自己数据处理这块需要互斥
------解决方案--------------------
如果有分包,但是在一个socket上提供一个wsarecv和wsasend,就不要对工作者线程进行挥斥。
如果多余一个,就需要。
------解决方案--------------------
逻辑上在处理数据时,可能共享读写的,肯定需要考虑互斥;但如果你只是做成一个echo的话,就可以省了,不过实际应用几乎没有echo形式的。。。
------解决方案--------------------
嗯。说白了,只需关心数据的同步问题。其它方面无需操心;
当然了,如果lz是做基于tcp协议的网络操作,必须考虑数据包的粘包等问题。