小编use*_*360的帖子

我何时必须使用boost :: asio:strand

阅读boost :: asio的文档,我还不清楚何时需要使用asio :: strand.假设我有一个使用io_service的线程,那么可以安全地在套接字上写入如下吗?

void Connection::write(boost::shared_ptr<string> msg)
{
    _io_service.post(boost::bind(&Connection::_do_write,this,msg));
}

void Connection::_do_write(boost::shared_ptr<string> msg)
{
    if(_write_in_progress)
    {
      _msg_queue.push_back(msg);
    }
    else
    {
      _write_in_progress=true;
      boost::asio::async_write(_socket, boost::asio::buffer(*(msg.get())),
      boost::bind(&Connection::_handle_write,this,
             boost::asio::placeholders::error));
    }
}

void Connection::_handle_write(boost::system::error_code const &error)
{
  if(!error)
  {
    if(!_msg_queue.empty())
    {
          boost::shared_ptr<string> msg=_msg_queue.front();
      _msg_queue.pop_front();
      boost::asio::async_write(_socket, boost::asio::buffer(*(msg.get())),
           boost::bind(&Connection::_handle_write,this,
                   boost::asio::placeholders::error));
        }
    else
    {
      _write_in_progress=false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

多个线程调用Connection :: write(..)或者我必须使用asio :: strand吗?

c++ multithreading boost boost-asio

8
推荐指数
2
解决办法
8305
查看次数

使用具有多个线程的libev

我想使用具有多个线程的libev来处理tcp连接.我想要的是:

  1. 主线程侦听传入连接,接受连接并将连接转发到workerthread.

  2. 我有一堆workerthreads.线程数取决于cpu的数量.每个工作线程都有一个事件循环.工作线程监听我是否可以在tcp套接字上写入或者是否有可供阅读的东西.

我看着libev的文档,我知道这可以用libev做,但我找不到任何的例子,我怎么也得做.
有人有例子吗?我认为我必须使用ev_loop_new()api,对于worker-threads和主线程我必须使用ev_default_loop()?

问候

c++ multicore libev

6
推荐指数
2
解决办法
1万
查看次数

C++ 中的任何 NIO 框架

我想在C++中使用一个NIO框架,它可以处理至少100,000个并发连接。我正在考虑使用 boost::asio,但我不知道它在多核系统上是否能很好地扩展。有人有使用 boost:asio 和处理这么多连接的经验吗?

c++ nio

4
推荐指数
1
解决办法
2020
查看次数

标签 统计

c++ ×3

boost ×1

boost-asio ×1

libev ×1

multicore ×1

multithreading ×1

nio ×1