c++ - ¿Boost:: asio:: deadline_timer utiliza un hilo para cada temporizador?
boost-asio boost-thread (2)
Tengo una lista de elementos que necesito actualizar en diferentes intervalos. La lista puede llegar a tener miles de elementos de largo. Cada elemento podría tener un intervalo diferente. Si creo un temporizador por artículo, ¿voy a saturar el sistema con hilos? Estaba pensando que sería mejor crear un temporizador igual al intervalo más pequeño en el conjunto de elementos, y luego en cada actualización incrementar un contador, y luego verificar si el contador ahora es igual a cualquier otro intervalo. Esto debería funcionar siempre que el intervalo más pequeño sea un múltiplo de todos los demás intervalos. ¿Alguna sugerencia?
Boost no usa un hilo por temporizador, mantiene una cola de temporizador. Cada temporizador se crea con el objeto boost::asio::io_service
que hace el trabajo real.
Este objeto puede despachar su trabajo en uno o más subprocesos, cuando ejecuta boost::asio::io_service::run()
explícitamente desde múltiples subprocesos , pero no hay correspondencia uno-a-uno entre temporizadores e hilos, y Asio lo hará no crear hilos a tus espaldas.
Las versiones recientes de Asio, Boost 1.43 y posteriores, usan la timerfd_create(2)
en Linux para deadline_timer
s.
Se cambió para usar timerfd para despachar temporizadores en Linux, cuando esté disponible.