From ffe3968d0b5b4217c431d1786c2f0c42ffc38e55 Mon Sep 17 00:00:00 2001 From: AJ Heller Date: Wed, 15 Feb 2023 14:00:55 -0800 Subject: [PATCH] [EventEngine] Add advice against blocking work in callbacks (#32397) --- include/grpc/event_engine/event_engine.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/include/grpc/event_engine/event_engine.h b/include/grpc/event_engine/event_engine.h index e3bddb54c88..d10444ed35e 100644 --- a/include/grpc/event_engine/event_engine.h +++ b/include/grpc/event_engine/event_engine.h @@ -33,6 +33,11 @@ namespace grpc_event_engine { namespace experimental { //////////////////////////////////////////////////////////////////////////////// +/// The EventEngine Interface +/// +/// Overview +/// -------- +/// /// The EventEngine encapsulates all platform-specific behaviors related to low /// level network I/O, timers, asynchronous execution, and DNS resolution. /// @@ -44,7 +49,8 @@ namespace experimental { /// /// A default cross-platform EventEngine instance is provided by gRPC. /// -/// LIFESPAN AND OWNERSHIP +/// Lifespan and Ownership +/// ---------------------- /// /// gRPC takes shared ownership of EventEngines via std::shared_ptrs to ensure /// that the engines remain available until they are no longer needed. Depending @@ -71,6 +77,19 @@ namespace experimental { /// std::unique_ptr server(builder.BuildAndStart()); /// server->Wait(); /// +/// +/// Blocking EventEngine Callbacks +/// ----------------------------- +/// +/// Doing blocking work in EventEngine callbacks is generally not advisable. +/// While gRPC's default EventEngine implementations have some capacity to scale +/// their thread pools to avoid starvation, this is not an instantaneous +/// process. Further, user-provided EventEngines may not be optimized to handle +/// excessive blocking work at all. +/// +/// *Best Practice* : Occasional blocking work may be fine, but we do not +/// recommend running a mostly blocking workload in EventEngine threads. +/// //////////////////////////////////////////////////////////////////////////////// class EventEngine : public std::enable_shared_from_this { public: