TARAXA
packets_queue.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <list>
4 #include <optional>
5 
8 #include "packet_data.hpp"
9 
11 
12 class PacketsQueue {
13  public:
14  PacketsQueue() = default;
15 
21  void pushBack(std::pair<tarcap::TarcapVersion, PacketData>&& packet);
22 
32  std::optional<std::pair<tarcap::TarcapVersion, PacketData>> pop(const PacketsBlockingMask& packets_blocking_mask);
33 
38  bool maxWorkersCountReached() const;
39 
45  void setMaxWorkersCount(size_t max_workers_count);
46 
51 
56 
61  bool empty() const;
62 
67  size_t size() const;
68 
73  size_t getActiveWorkersNum() const;
74 
75  private:
76  std::list<std::pair<tarcap::TarcapVersion, PacketData>> packets_;
77 
78  // How many workers can process packets from this queue at the same time
79  size_t kMaxWorkersCount_{0};
80 
81  // How many workers are currently processing packets from this queue at the same time
82  std::atomic<size_t> act_workers_count_{0};
83 
84  // How many packets are currently inside the queue
85  std::atomic<size_t> act_packets_count_{0};
86 };
87 
88 } // namespace taraxa::network::threadpool
Definition: packets_blocking_mask.hpp:12
Definition: packets_queue.hpp:12
void pushBack(std::pair< tarcap::TarcapVersion, PacketData > &&packet)
Push new task to the queue.
Definition: packets_queue.cpp:13
size_t kMaxWorkersCount_
Definition: packets_queue.hpp:79
std::optional< std::pair< tarcap::TarcapVersion, PacketData > > pop(const PacketsBlockingMask &packets_blocking_mask)
Return Task from queue. In some rare situations when all packets are blocked for processing due to bl...
Definition: packets_queue.cpp:18
void setMaxWorkersCount(size_t max_workers_count)
Set new max workers count.
Definition: packets_queue.cpp:38
std::atomic< size_t > act_workers_count_
Definition: packets_queue.hpp:82
void decrementActWorkersCount()
Decrement act_workers_count_ by 1.
Definition: packets_queue.cpp:42
bool empty() const
Definition: packets_queue.cpp:48
bool maxWorkersCountReached() const
Definition: packets_queue.cpp:5
size_t getActiveWorkersNum() const
Definition: packets_queue.cpp:52
size_t size() const
Definition: packets_queue.cpp:50
std::atomic< size_t > act_packets_count_
Definition: packets_queue.hpp:85
std::list< std::pair< tarcap::TarcapVersion, PacketData > > packets_
Definition: packets_queue.hpp:76
void incrementActWorkersCount()
Increment act_workers_count_ by 1.
Definition: packets_queue.cpp:40
Definition: node_stats.hpp:17