19 #ifndef GRPC_CORE_LIB_IOMGR_EXECUTOR_MPMCQUEUE_H
20 #define GRPC_CORE_LIB_IOMGR_EXECUTOR_MPMCQUEUE_H
105 uint64_t num_started;
106 uint64_t num_completed;
135 void PushWaiter(Waiter* waiter);
138 void RemoveWaiter(Waiter* waiter);
148 static const int kDeleteListInitSize = 1024;
150 static const int kQueueInitNumNodes = 1024;
152 Node** delete_list_ =
nullptr;
154 size_t delete_list_count_ = 0;
155 size_t delete_list_size_ = 0;
158 Node* queue_head_ =
nullptr;
159 Node* queue_tail_ =
nullptr;
160 Atomic<int> count_{0};
170 Node* AllocateNodes(
int num);
T Load(MemoryOrder order) const
Definition: atomic.h:44
Definition: mpmcqueue.h:51
void * Get(gpr_timespec *wait_time=nullptr)
Definition: mpmcqueue.cc:143
void Put(void *elem)
Definition: mpmcqueue.cc:102
int num_nodes() const
Definition: mpmcqueue.h:89
int count() const
Definition: mpmcqueue.h:73
InfLenFIFOQueue()
Definition: mpmcqueue.cc:79
~InfLenFIFOQueue()
Definition: mpmcqueue.cc:94
int init_num_nodes() const
Definition: mpmcqueue.h:92
Definition: mpmcqueue.h:34
virtual int count() const =0
virtual ~MPMCQueueInterface()
Definition: mpmcqueue.h:36
virtual void * Get(gpr_timespec *wait_time=nullptr)=0
virtual void Put(void *elem)=0
grpc_call_element * elem
Definition: client_channel.cc:112
QueuedPick * next
Definition: client_channel.cc:113
@ GPR_TIMESPAN
Unmeasurable clock type: no base, created by taking the difference between two times.
Definition: gpr_types.h:42
Round Robin Policy.
Definition: backend_metric.cc:24
DebugOnlyTraceFlag grpc_thread_pool_trace(false, "thread_pool")
Definition: mpmcqueue.h:30
Analogous to struct timespec.
Definition: gpr_types.h:47
Definition: mpmcqueue.h:75
Node * prev
Definition: mpmcqueue.h:77
Node * next
Definition: mpmcqueue.h:76
Node()
Definition: mpmcqueue.h:81
gpr_timespec insert_time
Definition: mpmcqueue.h:79
void * content
Definition: mpmcqueue.h:78
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
Time constants.
Definition: time.cc:46