proxygen
folly::Executor Class Referenceabstract

#include <Executor.h>

Inheritance diagram for folly::Executor:
CrappyExecutor DoNothingExecutor folly::DefaultKeepAliveExecutor folly::DefaultKeepAliveExecutor::WeakRef folly::DrivableExecutor folly::fibers::FiberManager folly::futures::detail::DeferredExecutor folly::futures::detail::WaitExecutor folly::InlineExecutor folly::IOExecutor folly::KeepAliveTestExecutor folly::QueuedImmediateExecutor folly::ScheduledExecutor folly::SequencedExecutor folly::TestExecutor folly::ThreadedExecutor folly::VirtualEventBase PriorityExecutor ThreadExecutor ThrowingExecutor

Classes

class  KeepAlive
 

Public Member Functions

virtual ~Executor ()
 
virtual void add (Func)=0
 
virtual void addWithPriority (Func, int8_t priority)
 
virtual uint8_t getNumPriorities () const
 

Static Public Member Functions

template<typename ExecutorT >
static KeepAlive< ExecutorT > getKeepAliveToken (ExecutorT *executor)
 
template<typename ExecutorT >
static KeepAlive< ExecutorT > getKeepAliveToken (ExecutorT &executor)
 

Static Public Attributes

static const int8_t LO_PRI = SCHAR_MIN
 
static const int8_t MID_PRI = 0
 
static const int8_t HI_PRI = SCHAR_MAX
 

Protected Member Functions

virtual bool keepAliveAcquire ()
 
virtual void keepAliveRelease ()
 

Static Protected Member Functions

template<typename ExecutorT >
static bool isKeepAliveDummy (const KeepAlive< ExecutorT > &keepAlive)
 
template<typename ExecutorT >
static KeepAlive< ExecutorT > makeKeepAlive (ExecutorT *executor)
 

Static Private Member Functions

template<typename ExecutorT >
static KeepAlive< ExecutorT > makeKeepAliveDummy (ExecutorT *executor)
 

Detailed Description

An Executor accepts units of work with add(), which should be threadsafe.

Definition at line 31 of file Executor.h.

Constructor & Destructor Documentation

virtual folly::Executor::~Executor ( )
inlinevirtual

Definition at line 34 of file Executor.h.

References add(), addWithPriority(), and int8_t.

34 {}

Member Function Documentation

void folly::Executor::addWithPriority ( Func  ,
int8_t  priority 
)
virtual

Enqueue a function with a given priority, where 0 is the medium priority This is up to the implementation to enforce

Reimplemented in folly::CPUThreadPoolExecutor, folly::SerialExecutor, folly::VirtualExecutor, and folly::DefaultKeepAliveExecutor::WeakRef.

Definition at line 25 of file Executor.cpp.

Referenced by TEST(), and ~Executor().

25  {
26  throw std::runtime_error(
27  "addWithPriority() is not implemented for this Executor");
28 }
template<typename ExecutorT >
static KeepAlive<ExecutorT> folly::Executor::getKeepAliveToken ( ExecutorT *  executor)
inlinestatic

Definition at line 138 of file Executor.h.

References folly::pushmi::executor, keepAliveAcquire(), and value.

Referenced by folly::SerialExecutor::add(), folly::SerialExecutor::addWithPriority(), folly::Executor::KeepAlive< folly::VirtualEventBase >::copy(), folly::SerialExecutor::createUnique(), getKeepAliveToken(), folly::getKeepAliveToken(), folly::isSequencedExecutor(), folly::VirtualEventBase::runInEventBaseThread(), folly::TEST(), and folly::VirtualExecutor::wrapFunc().

138  {
139  static_assert(
141  "getKeepAliveToken only works for folly::Executor implementations.");
142  if (!executor) {
143  return {};
144  }
145  folly::Executor* executorPtr = executor;
146  if (executorPtr->keepAliveAcquire()) {
147  return makeKeepAlive<ExecutorT>(executor);
148  }
149  return makeKeepAliveDummy<ExecutorT>(executor);
150  }
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static const char *const value
Definition: Conv.cpp:50
virtual bool keepAliveAcquire()
Definition: Executor.cpp:30
template<typename ExecutorT >
static KeepAlive<ExecutorT> folly::Executor::getKeepAliveToken ( ExecutorT &  executor)
inlinestatic

Definition at line 153 of file Executor.h.

References getKeepAliveToken(), and value.

153  {
154  static_assert(
156  "getKeepAliveToken only works for folly::Executor implementations.");
157  return getKeepAliveToken(&executor);
158  }
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:138
static const char *const value
Definition: Conv.cpp:50
virtual uint8_t folly::Executor::getNumPriorities ( ) const
inlinevirtual
template<typename ExecutorT >
static bool folly::Executor::isKeepAliveDummy ( const KeepAlive< ExecutorT > &  keepAlive)
inlinestaticprotected

Returns true if the KeepAlive is constructed from an executor that does not support the keep alive ref-counting functionality

Definition at line 166 of file Executor.h.

References folly::Executor::KeepAlive< ExecutorT >::executorAndDummyFlag_, keepAliveAcquire(), and keepAliveRelease().

Referenced by folly::VirtualExecutor::VirtualExecutor().

166  {
167  return reinterpret_cast<intptr_t>(keepAlive.executorAndDummyFlag_) &
169  }
static constexpr intptr_t kDummyFlag
Definition: Executor.h:118
void folly::Executor::keepAliveRelease ( )
protectedvirtual

Reimplemented in folly::EventBase, folly::futures::detail::WaitExecutor, folly::futures::detail::DeferredExecutor, folly::VirtualEventBase, folly::DefaultKeepAliveExecutor, folly::SerialExecutor, folly::DefaultKeepAliveExecutor::WeakRef, folly::python::AsyncioExecutor, and folly::KeepAliveTestExecutor.

Definition at line 34 of file Executor.cpp.

References folly::FATAL.

Referenced by isKeepAliveDummy().

34  {
35  LOG(FATAL) << __func__ << "() should not be called for folly::Executor types "
36  << "which do not override keepAliveAcquire()";
37 }
template<typename ExecutorT >
static KeepAlive<ExecutorT> folly::Executor::makeKeepAlive ( ExecutorT *  executor)
inlinestaticprotected

Definition at line 179 of file Executor.h.

References folly::pushmi::executor, and value.

Referenced by folly::DefaultKeepAliveExecutor::WeakRef::create(), and folly::DefaultKeepAliveExecutor::WeakRef::lock().

179  {
180  static_assert(
182  "makeKeepAlive only works for folly::Executor implementations.");
183  return KeepAlive<ExecutorT>{executor, false};
184  }
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static const char *const value
Definition: Conv.cpp:50
template<typename ExecutorT >
static KeepAlive<ExecutorT> folly::Executor::makeKeepAliveDummy ( ExecutorT *  executor)
inlinestaticprivate

Definition at line 188 of file Executor.h.

References folly::pushmi::executor, and value.

188  {
189  static_assert(
191  "makeKeepAliveDummy only works for folly::Executor implementations.");
192  return KeepAlive<ExecutorT>{executor, true};
193  }
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
static const char *const value
Definition: Conv.cpp:50

Member Data Documentation

const int8_t folly::Executor::HI_PRI = SCHAR_MAX
static

Definition at line 50 of file Executor.h.

Referenced by TEST().

const int8_t folly::Executor::LO_PRI = SCHAR_MIN
static

Definition at line 48 of file Executor.h.

Referenced by folly::CPUThreadPoolExecutor::stopThreads(), and TEST().


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