16 #ifndef BLOOMBERG_QUANTUM_IO_QUEUE_H 17 #define BLOOMBERG_QUANTUM_IO_QUEUE_H 21 #include <condition_variable> 24 #include <quantum/interface/quantum_itask.h> 25 #include <quantum/interface/quantum_iterminate.h> 26 #include <quantum/interface/quantum_iqueue.h> 27 #include <quantum/quantum_io_task.h> 28 #include <quantum/quantum_queue_statistics.h> 29 #include <quantum/quantum_configuration.h> 43 using TaskList = std::list<IoTask::Ptr, QueueListAllocator>;
49 std::vector<IoQueue>* sharedIoQueues);
71 size_t size() const final;
73 bool empty() const final;
89 std::chrono::milliseconds getBackoffInterval();
93 bool _loadBalanceSharedIoQueues;
94 std::chrono::milliseconds _loadBalancePollIntervalMs;
95 Configuration::BackoffPolicy _loadBalancePollIntervalBackoffPolicy;
96 size_t _loadBalancePollIntervalNumBackoffs;
97 size_t _loadBalanceBackoffNum;
98 std::shared_ptr<
std::thread> _thread;
101 std::mutex _notEmptyMutex;
102 std::condition_variable _notEmptyCond;
103 std::atomic_bool _isEmpty;
104 std::atomic_bool _isInterrupted;
105 std::atomic_bool _isIdle;
106 std::atomic_flag _terminated;
112 #include <quantum/impl/quantum_io_queue_impl.h> 114 #endif //BLOOMBERG_QUANTUM_IO_QUEUE_H Definition: quantum_buffer_impl.h:22
std::list< IoTask::Ptr, QueueListAllocator > TaskList
Definition: quantum_io_queue.h:43
bool tryEnqueue(ITask::Ptr task) final
Definition: quantum_io_queue_impl.h:200
ITask::Ptr dequeue(std::atomic_bool &hint) final
Definition: quantum_io_queue_impl.h:236
Thread queue for executing IO tasks.
Definition: quantum_io_queue.h:40
Definition: quantum_stl_impl.h:23
void run() final
Definition: quantum_io_queue_impl.h:86
bool isIdle() const final
Definition: quantum_io_queue_impl.h:450
Interface to a task queue. For internal use only.
Definition: quantum_iqueue.h:33
Provides various counters related to queues and task execution.
Definition: quantum_queue_statistics.h:30
Definition: quantum_configuration.h:31
TaskList::iterator TaskListIter
Definition: quantum_io_queue.h:44
void signalEmptyCondition(bool value) final
Definition: quantum_io_queue_impl.h:370
SpinLock & getLock() final
Definition: quantum_io_queue_impl.h:364
void enqueue(ITask::Ptr task) final
Definition: quantum_io_queue_impl.h:188
std::shared_ptr< IQueue > Ptr
Definition: quantum_iqueue.h:36
Interface to access and manipulate a QueueStatistics object.
Definition: quantum_iqueue_statistics.h:29
void pinToCore(int coreId) final
Definition: quantum_io_queue_impl.h:80
Interface to a task. For internal use only.
Definition: quantum_itask.h:32
IoQueue()
Definition: quantum_io_queue_impl.h:27
IQueueStatistics & stats() final
Definition: quantum_io_queue_impl.h:358
void terminate() final
Terminates the object.
Definition: quantum_io_queue_impl.h:341
size_t size() const final
Definition: quantum_io_queue_impl.h:315
ITask::Ptr tryDequeue(std::atomic_bool &hint) final
Definition: quantum_io_queue_impl.h:248
bool empty() const final
Definition: quantum_io_queue_impl.h:332