proxygen
|
Fiber object used by FiberManager to execute tasks. More...
#include <Fiber.h>
Classes | |
class | LocalData |
Public Member Functions | |
void | resume () |
Fiber (const Fiber &)=delete | |
Fiber & | operator= (const Fiber &)=delete |
~Fiber () | |
std::pair< void *, size_t > | getStack () const |
Private Types | |
enum | State { INVALID, NOT_STARTED, READY_TO_RUN, RUNNING, AWAITING, AWAITING_IMMEDIATE, YIELDED } |
Private Member Functions | |
Fiber (FiberManager &fiberManager) | |
void | init (bool recordStackUsed) |
template<typename F > | |
void | setFunction (F &&func) |
template<typename F , typename G > | |
void | setFunctionFinally (F &&func, G &&finally) |
void | fiberFunc () |
void | preempt (State state) |
void | recordStackPosition () |
void * | getUserBuffer () |
Private Attributes | |
State | state_ {INVALID} |
FiberManager & | fiberManager_ |
size_t | fiberStackSize_ |
unsigned char * | fiberStackLimit_ |
FiberImpl | fiberImpl_ |
std::shared_ptr< RequestContext > | rcontext_ |
folly::Function< void()> | func_ |
bool | recordStackUsed_ {false} |
bool | stackFilledWithMagic_ {false} |
folly::AtomicIntrusiveLinkedListHook< Fiber > | nextRemoteReady_ |
std::aligned_storage< kUserBufferSize >::type | userBuffer_ |
folly::Function< void()> | resultFunc_ |
folly::Function< void()> | finallyFunc_ |
LocalData | localData_ |
folly::IntrusiveListHook | listHook_ |
folly::IntrusiveListHook | globalListHook_ |
std::thread::id | threadId_ {} |
Static Private Attributes | |
static constexpr size_t | kUserBufferSize = 256 |
Friends | |
class | Baton |
class | FiberManager |
Fiber object used by FiberManager to execute tasks.
Each Fiber object can be executing at most one task at a time. In active phase it is running the task function and keeps its context. Fiber is also used to pass data to blocked task and thus unblock it. Each Fiber may be associated with a single FiberManager.
|
private |
Definition at line 67 of file Fiber.h.
|
delete |
folly::fibers::Fiber::~Fiber | ( | ) |
Definition at line 104 of file Fiber.cpp.
References folly::fibers::GuardPageAllocator::deallocate(), fiberManager_, fiberStackLimit_, fiberStackSize_, and folly::fibers::FiberManager::stackAllocator_.
|
explicitprivate |
Definition at line 70 of file Fiber.cpp.
References folly::fibers::FiberManager::allFibers_, fiberFunc(), fiberManager_, fiberStackLimit_, and fiberStackSize_.
|
private |
Definition at line 128 of file Fiber.cpp.
References folly::fibers::FiberManager::deactivateFiber(), folly::fibers::FiberManager::exceptionCallback_, fiberManager_, fiberStackLimit_, fiberStackSize_, finallyFunc_, func_, INVALID, max, NOT_STARTED, folly::fibers::FiberManager::options_, recordStackUsed_, resultFunc_, RUNNING, folly::fibers::FiberManager::stackHighWatermark_, folly::fibers::FiberManager::Options::stackSize, state_, threadId_, and UNLIKELY.
Referenced by Fiber(), and init().
|
inline |
Retrieve this fiber's base stack and stack size.
Definition at line 62 of file Fiber.h.
References fiberStackLimit_, and fiberStackSize_.
Referenced by folly::fibers::FiberManager::activateFiber(), and folly::fibers::FiberManager::FibersPoolResizer::operator()().
|
inlineprivate |
Definition at line 38 of file Fiber-inl.h.
References userBuffer_.
|
private |
Definition at line 78 of file Fiber.cpp.
References fiberFunc(), fiberImpl_, fiberStackLimit_, fiberStackSize_, recordStackUsed_, stackFilledWithMagic_, uint64_t, and UNLIKELY.
Referenced by folly::fibers::FiberManager::getFiber().
|
private |
Switch out of fiber context into the main context, performing necessary housekeeping for the new state.
state | New state, must not be RUNNING. |
Definition at line 172 of file Fiber.cpp.
References folly::fibers::FiberManager::activeFiber_, folly::fibers::FiberManager::deactivateFiber(), fiberManager_, folly::fibers::FiberManager::preemptRunner_, READY_TO_RUN, recordStackPosition(), folly::fibers::InlineFunctionRunner::run(), RUNNING, and state_.
Referenced by folly::fibers::FiberManager::runInMainContext(), folly::fibers::Baton::waitFiber(), and folly::fibers::FiberManager::yield().
|
private |
Examines how much of the stack we used at this moment and registers with the FiberManager (for monitoring).
Definition at line 114 of file Fiber.cpp.
References fiberManager_, fiberStackLimit_, fiberStackSize_, max, and folly::fibers::FiberManager::stackHighWatermark_.
Referenced by preempt().
void folly::fibers::Fiber::resume | ( | ) |
Resume the blocked task
Definition at line 54 of file Fiber.cpp.
References AWAITING, folly::fibers::FiberManager::ensureLoopScheduled(), fiberManager_, LIKELY, folly::fibers::FiberManager::observer_, READY_TO_RUN, folly::fibers::FiberManager::readyFibers_, folly::fibers::FiberManager::remoteReadyInsert(), folly::ExecutionObserver::runnable(), state_, and threadId_.
Referenced by folly::fibers::Baton::FiberWaiter::post().
|
private |
Definition at line 24 of file Fiber-inl.h.
References func_, INVALID, NOT_STARTED, and state_.
Referenced by folly::fibers::FiberManager::loopUntilNoReadyImpl().
|
private |
Definition at line 31 of file Fiber-inl.h.
References finallyFunc_, INVALID, NOT_STARTED, resultFunc_, and state_.
|
friend |
|
private |
underlying fiber implementation
Definition at line 112 of file Fiber.h.
Referenced by folly::fibers::FiberManager::activateFiber(), folly::fibers::FiberManager::deactivateFiber(), and init().
|
private |
Associated FiberManager
Definition at line 109 of file Fiber.h.
Referenced by Fiber(), fiberFunc(), preempt(), recordStackPosition(), resume(), and ~Fiber().
|
private |
Definition at line 111 of file Fiber.h.
Referenced by Fiber(), fiberFunc(), getStack(), init(), recordStackPosition(), and ~Fiber().
|
private |
Definition at line 110 of file Fiber.h.
Referenced by Fiber(), fiberFunc(), getStack(), init(), recordStackPosition(), and ~Fiber().
|
private |
Definition at line 129 of file Fiber.h.
Referenced by fiberFunc(), folly::fibers::FiberManager::runReadyFiber(), and setFunctionFinally().
|
private |
task function
Definition at line 114 of file Fiber.h.
Referenced by fiberFunc(), folly::fibers::FiberManager::runReadyFiber(), and setFunction().
|
private |
|
staticprivate |
|
private |
list hook for different FiberManager queues
|
private |
Definition at line 173 of file Fiber.h.
Referenced by folly::fibers::FiberManager::initLocalData(), folly::fibers::FiberManager::local(), folly::fibers::FiberManager::loopUntilNoReadyImpl(), and folly::fibers::FiberManager::runReadyFiber().
|
private |
|
private |
current RequestContext
Definition at line 113 of file Fiber.h.
Referenced by folly::fibers::FiberManager::initLocalData(), folly::fibers::FiberManager::loopUntilNoReadyImpl(), and folly::fibers::FiberManager::runReadyFiber().
|
private |
Definition at line 115 of file Fiber.h.
Referenced by fiberFunc(), and init().
|
private |
Definition at line 128 of file Fiber.h.
Referenced by fiberFunc(), folly::fibers::FiberManager::runReadyFiber(), and setFunctionFinally().
|
private |
current Fiber state
Definition at line 78 of file Fiber.h.
Referenced by fiberFunc(), preempt(), resume(), folly::fibers::FiberManager::runReadyFiber(), setFunction(), setFunctionFinally(), and folly::fibers::FiberManager::yield().
|
private |
Definition at line 178 of file Fiber.h.
Referenced by fiberFunc(), and resume().
|
private |
Definition at line 124 of file Fiber.h.
Referenced by getUserBuffer().