Commit 67462593 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

Use thread-local in RequestContext::getStaticContext

Summary:
[Folly] Use thread-local in `RequestContext::getStaticContext`.

`folly::SingletonThreadLocal` uses `folly::ThreadLocal`. However, `static FOLLY_TLS` (`static __thread`) is always faster than `folly::ThreadLocal` for thread-local singletons for which iteration is not required.

Reviewed By: djwatson

Differential Revision: D6725091

fbshipit-source-id: 9979f39677284b1051cb109b461097495d77ca17
parent 1aabda15
...@@ -141,10 +141,16 @@ std::shared_ptr<RequestContext> RequestContext::setContext( ...@@ -141,10 +141,16 @@ std::shared_ptr<RequestContext> RequestContext::setContext(
} }
std::shared_ptr<RequestContext>& RequestContext::getStaticContext() { std::shared_ptr<RequestContext>& RequestContext::getStaticContext() {
using SingletonT = SingletonThreadLocal<std::shared_ptr<RequestContext>>; using T = std::shared_ptr<RequestContext>;
static SingletonT singleton; #ifdef FOLLY_TLS
alignas(alignof(T)) static FOLLY_TLS unsigned char storage[sizeof(T)];
static FOLLY_TLS T* singleton;
return singleton ? *singleton : *(singleton = new (storage) T());
#else
struct PrivateTag {};
static SingletonThreadLocal<T, PrivateTag> singleton;
return singleton.get(); return singleton.get();
#endif
} }
RequestContext* RequestContext::get() { RequestContext* RequestContext::get() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment