Internal use. More...
#include <callback_queue_manager.h>
Classes | |
struct | QueueInfo |
struct | ThreadInfo |
Public Member Functions | |
void | addQueue (const CallbackQueuePtr &queue, bool threaded) |
void | callbackAdded (const CallbackQueuePtr &queue) |
CallbackQueueManager (uint32_t num_worker_threads=0) | |
Constructor. More... | |
uint32_t | getNumWorkerThreads () |
void | removeQueue (const CallbackQueuePtr &queue) |
void | stop () |
~CallbackQueueManager () | |
Private Types | |
typedef boost::unordered_map< CallbackQueue *, QueueInfoPtr > | M_Queue |
typedef boost::shared_ptr< QueueInfo > | QueueInfoPtr |
typedef std::vector< CallbackQueuePtr > | V_Queue |
typedef boost::scoped_array< ThreadInfo > | V_ThreadInfo |
Private Member Functions | |
ThreadInfo * | getSmallestQueue () |
void | managerThread () |
void | workerThread (ThreadInfo *) |
Private Attributes | |
uint32_t | num_worker_threads_ |
M_Queue | queues_ |
boost::mutex | queues_mutex_ |
bool | running_ |
boost::thread_group | tg_ |
V_ThreadInfo | thread_info_ |
V_Queue | waiting_ |
boost::condition_variable | waiting_cond_ |
boost::mutex | waiting_mutex_ |
Internal use.
Manages a set of callback queues, potentially calling callbacks from them concurrently in different threads. Essentially a task manager specialized for callback queues.
Uses 1 manager thread + N worker threads. The manager thread gives work to the worker threads by finding the thread with the fewest pending tasks and appending to that list. This does mean that a single long-running callback can potentially block other callbacks from being executed. Some kind of work-stealing could mitigate this, and is a good direction for future work.
Definition at line 65 of file callback_queue_manager.h.
|
private |
Definition at line 110 of file callback_queue_manager.h.
Definition at line 108 of file callback_queue_manager.h.
|
private |
Definition at line 115 of file callback_queue_manager.h.
|
private |
Definition at line 158 of file callback_queue_manager.h.
nodelet::detail::CallbackQueueManager::CallbackQueueManager | ( | uint32_t | num_worker_threads = 0 | ) |
Constructor.
By default, uses the number of hardware threads available on the current system.
Definition at line 46 of file callback_queue_manager.cpp.
nodelet::detail::CallbackQueueManager::~CallbackQueueManager | ( | ) |
Definition at line 63 of file callback_queue_manager.cpp.
void nodelet::detail::CallbackQueueManager::addQueue | ( | const CallbackQueuePtr & | queue, |
bool | threaded | ||
) |
Definition at line 111 of file callback_queue_manager.cpp.
void nodelet::detail::CallbackQueueManager::callbackAdded | ( | const CallbackQueuePtr & | queue | ) |
Definition at line 130 of file callback_queue_manager.cpp.
uint32_t nodelet::detail::CallbackQueueManager::getNumWorkerThreads | ( | ) |
Definition at line 106 of file callback_queue_manager.cpp.
|
private |
Definition at line 140 of file callback_queue_manager.cpp.
|
private |
Definition at line 164 of file callback_queue_manager.cpp.
void nodelet::detail::CallbackQueueManager::removeQueue | ( | const CallbackQueuePtr & | queue | ) |
Definition at line 122 of file callback_queue_manager.cpp.
void nodelet::detail::CallbackQueueManager::stop | ( | ) |
Definition at line 88 of file callback_queue_manager.cpp.
|
private |
Definition at line 245 of file callback_queue_manager.cpp.
|
private |
Definition at line 162 of file callback_queue_manager.h.
|
private |
Definition at line 111 of file callback_queue_manager.h.
|
private |
Definition at line 112 of file callback_queue_manager.h.
|
private |
Definition at line 161 of file callback_queue_manager.h.
|
private |
Definition at line 119 of file callback_queue_manager.h.
|
private |
Definition at line 159 of file callback_queue_manager.h.
|
private |
Definition at line 116 of file callback_queue_manager.h.
|
private |
Definition at line 118 of file callback_queue_manager.h.
|
private |
Definition at line 117 of file callback_queue_manager.h.