CGraph
Public Member Functions | Private Attributes | List of all members
UWorkStealingQueue< T > Class Template Reference

工作窃取队列,实现为双端队列(deque_); push在队尾发生,可以一次性写入一个或多个任务,也支持tryPush和带锁的push; pop在队头发生,可以一次性拿出一个或多个任务,也支持tryPop; trySteal在队尾发生,可以一次性窃取一个或多个任务; More...

#include <UWorkStealingQueue.h>

Inheritance diagram for UWorkStealingQueue< T >:
Inheritance graph
[legend]
Collaboration diagram for UWorkStealingQueue< T >:
Collaboration graph
[legend]

Public Member Functions

CVoid push (T &&value)
 
CVoid push (T &&value, CBool enable, CBool lockable)
 
CBool tryPush (T &&value)
 
CVoid push (const std::vector< T > &values)
 
CBool tryPop (T &value)
 
CBool tryPop (std::vector< T > &values, int maxLocalBatchSize)
 
CBool trySteal (T &value)
 
CBool trySteal (std::vector< T > &values, int maxStealBatchSize)
 
 UWorkStealingQueue ()=default
 
- Public Member Functions inherited from CObject
 CObject ()=default
 
virtual CStatus init ()
 
virtual CStatus destroy ()
 
virtual ~CObject ()=default
 

Private Attributes

std::deque< T > deque_
 

Additional Inherited Members

- Protected Member Functions inherited from UThreadObject
CStatus run () override
 
- Protected Member Functions inherited from UtilsObject
CStatus run () override
 
- Protected Attributes inherited from UQueueObject
std::mutex mutex_
 
std::condition_variable cv_
 

Detailed Description

template<typename T>
class UWorkStealingQueue< T >

工作窃取队列,实现为双端队列(deque_); push在队尾发生,可以一次性写入一个或多个任务,也支持tryPush和带锁的push; pop在队头发生,可以一次性拿出一个或多个任务,也支持tryPop; trySteal在队尾发生,可以一次性窃取一个或多个任务;

  1. 工作的拿取发生在队头、窃取发生在队尾,可以显著减小工作线程和窃取线程竞争的概率;
  2. 主线程的工作拿取优先发生在第一队列、其次第二队列;窃取优先发生在第二队列、其次发生在第一队列,又可以进一步降低竞争概率;
    Template Parameters
    T

Constructor & Destructor Documentation

◆ UWorkStealingQueue()

template<typename T >
UWorkStealingQueue< T >::UWorkStealingQueue ( )
default

Member Function Documentation

◆ push() [1/3]

template<typename T >
CVoid UWorkStealingQueue< T >::push ( const std::vector< T > &  values)
inline

向队列中写入信息

Parameters
values
Here is the call graph for this function:

◆ push() [2/3]

template<typename T >
CVoid UWorkStealingQueue< T >::push ( T &&  value)
inline

向队列中写入信息

Parameters
value
Here is the call graph for this function:

◆ push() [3/3]

template<typename T >
CVoid UWorkStealingQueue< T >::push ( T &&  value,
CBool  enable,
CBool  lockable 
)
inline

有条件的写入数据信息

Parameters
value
enable
state
Returns

◆ tryPop() [1/2]

template<typename T >
CBool UWorkStealingQueue< T >::tryPop ( std::vector< T > &  values,
int  maxLocalBatchSize 
)
inline

从头部开始批量获取可执行任务信息

Parameters
values
maxLocalBatchSize
Returns

◆ tryPop() [2/2]

template<typename T >
CBool UWorkStealingQueue< T >::tryPop ( T &  value)
inline

弹出节点,从头部进行

Parameters
value
Returns

◆ tryPush()

template<typename T >
CBool UWorkStealingQueue< T >::tryPush ( T &&  value)
inline

尝试往队列里写入信息

Parameters
value
Returns

◆ trySteal() [1/2]

template<typename T >
CBool UWorkStealingQueue< T >::trySteal ( std::vector< T > &  values,
int  maxStealBatchSize 
)
inline

批量窃取节点,从尾部进行

Parameters
values
Returns

◆ trySteal() [2/2]

template<typename T >
CBool UWorkStealingQueue< T >::trySteal ( T &  value)
inline

窃取节点,从尾部进行

Parameters
task
Returns

Member Data Documentation

◆ deque_

template<typename T >
std::deque<T> UWorkStealingQueue< T >::deque_
private

The documentation for this class was generated from the following file: