http://theboostcpplibraries.com/boost.asio-scalabilityC++ увеличить ASIO многопоточного
Я изучаю Boost.Asio и это вызывает у меня любопытство. Существует источник (пример 32.3)
#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();
}
Хотя я опускаю thread2, выход экрана равен. Число потоков в исходном примере равно двум, а количество потоков в этом источнике - одно. Хотя число потоков равно одному, таймер 1 и таймер2 начинают и заканчивают одновременно.
Интересно, почему число потоков должно быть два.
Спасибо за ваше отношение!
пока это/работает/это действительно плохой пример для асинхронного программирования; Обработчики Async не должны выполнять задачи блокировки. В противном случае вы можете легко голодать от задач ввода-вывода. Используйте очередь и выделенные рабочие для работы с более длинными работающими задачами. Кроме этого, объяснение на месте, поэтому +1 – sehe
@sehe Я согласен - цель этого примера - продемонстрировать одновременное или последовательное выполнение обработчика, показывая вход и выход обработчика в человеческом масштабе. – janm
Благодарим вас за помощь. –