4个工作者线程,每一个连接5个并发收,两个IOCP对象。
一个对象用于连接管理TCP Server,其中有两个辅助线程,一个用于重连(每十秒查询一次,如果没连接则进行连接,两个连续的连接之间有100ms延时),另一个用于实时对每个TCP Server进行通信,大约每一秒向一个TCP Server发送一次。
另一个对象用于管理TCP Client,只是相应TCP Client的命令,如果接收到命令则进行返回。 现在遇到的问题是:启动程序后,连接(十多个连接)的时候CPU会上升到50%,有时CPU在连接成功后会降下来,有时将不下来,紧接着会出现各个TCP Server连续的连接和断开现象,收发也出现异常。大概是什么原因,请各位看官指教,谢谢! 会不会是第一个对象中有两个辅助线程,一个对连接后的Socket进行CreateIoCompletionPort,而另一个对其他连接上的Socket进行收发,导致IOCP部分产生冲突?
一个对象用于连接管理TCP Server,其中有两个辅助线程,一个用于重连(每十秒查询一次,如果没连接则进行连接,两个连续的连接之间有100ms延时),另一个用于实时对每个TCP Server进行通信,大约每一秒向一个TCP Server发送一次。
另一个对象用于管理TCP Client,只是相应TCP Client的命令,如果接收到命令则进行返回。 现在遇到的问题是:启动程序后,连接(十多个连接)的时候CPU会上升到50%,有时CPU在连接成功后会降下来,有时将不下来,紧接着会出现各个TCP Server连续的连接和断开现象,收发也出现异常。大概是什么原因,请各位看官指教,谢谢! 会不会是第一个对象中有两个辅助线程,一个对连接后的Socket进行CreateIoCompletionPort,而另一个对其他连接上的Socket进行收发,导致IOCP部分产生冲突?
或者,有个简单的方法,试试intel vtune(只能用在intel的cpu上,AMD也有自己的工具)。可以看到每句语句的执行占用cpu的时间。
==========广告签名============
http://shop33712512.taobao.com
淘宝店,专卖化妆品、自家蜂产品
==========广告签名============
一个socket发起connect请求,在还没有返回是否连接成功的时候,已经间隔了100ms,然后你又对该socket发起一次connect请求呢?
10s查询一次,每个连接之间的连接间隔是100ms,即当前的连接返回后Sleep(100),然后进行下一个连接(重新建立socket)。
按说不会出现楼上两位所说的情况。 后来我跟踪了一下,发现部分连接上的Socket是在GetQueuedCompletionStatus时出现ERROR_NETNAME_DELETED而关闭的,有些是在WSARecv和WSASend时出现WSAENOTSOCK而关闭的。 我把上面的Sleep(100)改成Sleep(300)会改善很多,难道说连续的两个Connect之间须有足够的延时?
什么原因导致了Socket的关闭???