我创建了一个控制台应用程序,在网络链接上发送数据。我使用boost库,线程和asio;目前我在Windows下运行它。如果我运行一个应用程序,它可以很好地工作,但是如果我在两个不同的控制台上打开两个实例,则CPU负载会达到100%,如果关闭其中一个应用程序,它将恢复正常。我只是使用了一个简单的套接字来进行异步读写,并且使用了条件变量和互斥体的线程。处理这种情况时有什么特别的事情要做?我可以告诉你一些代码,但我认为这是没有什么特别的:提升asio和线程,如果我运行两个实例,我得到cpu 100%
socket->connect(tcp::endpoint(address::from_string(getAddress()),getPort()));
连接
和
socket->async_read_some(buffer(receiveData),bind(&NetworkLink::handle_response, this,placeholders::error,placeholders::bytes_transferred));
的handle_response函数内部进行异步读取。 对于线程我用
boost::unique_lock<boost::mutex> messages_lock(message_received_mutex);
删除一切,从头开始一个简单的测试项目,我想知道是否有在这种情况下应采取的任何特殊照顾了。
那么,你想要你付出的所有处理能力去浪费吗?请解释您为什么认为这种行为不正确/需要。 –
请发布完整的代码来演示问题。 –
你可以通过使用“async_read”而不是“async_read_some”来重新检查吗?它只是我的直觉。需要更多/完整的代码来理解 – Arunmu