Зачем boost::asio::io_service помещать в отдельный поток?

332
17 февраля 2017, 02:58

Задался вопросом, а зачем в данном примере io_service в разных потоках...

#include <boost/asio/io_service.hpp>
#include <boost/asio/steady_timer.hpp>
#include <chrono>
#include <thread>
#include <iostream>
using namespace boost::asio;
int main()
{
  io_service ioservice;
  steady_timer timer1{ioservice, std::chrono::seconds{3}};
  timer1.async_wait([](const boost::system::error_code &ec)
  { std::cout << "3 sec\n"; });
  steady_timer timer2{ioservice, std::chrono::seconds{3}};
  timer2.async_wait([](const boost::system::error_code &ec)
  { std::cout << "3 sec\n"; });
  std::thread thread1{[&ioservice](){ ioservice.run(); }};
  std::thread thread2{[&ioservice](){ ioservice.run(); }};
  thread1.join();
  thread2.join();
}

Попробовал просто io_service.run() и один раз в главном потоке - и так же все асинхронно вывелось... в чем профит?

Answer 1

Приципильно разницы нет, т.е. один из ioservice.run(); вы можете вызвать в отдельном потоке, а второй в главном. Но тогда вы блокируете главный поток. Если же оба ioservice.run(); вы вызываете в отдельных потоках, то в главном вы можете производить какую-то работу, а потом вставить на ожидание завершения.

READ ALSO
массовая замена в mysql

массовая замена в mysql

и так, есть таблица, содержащая, например, логи(не обязательно их)в таблице больше 50000 значений в формате www

295
Как декодировать юникод в SQL запросе?

Как декодировать юникод в SQL запросе?

Есть CУБД MySQLВ текстовом поле лежит следующее значение:

319