Skip to content

Commit f34afc9

Browse files
author
zhuravsky-max
committed
Возможность управления пулом nexting thread в gRPC
Добавил возможность управлять количеством потоков в пуле `nexting_thread` в gRPC библиотеке. Судя по коду количество потоков в пуле в этом месте выбирается, исходя из количества ядер, доступных на машине. Для некоторых сценариев использования это избыточно. 159df251a530632c3c611ce85ff87f63907d917a
1 parent 0cf62e6 commit f34afc9

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

contrib/libs/grpc/src/cpp/common/completion_queue_cc.cc

+20
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,23 @@
3131
#include "src/core/lib/gpr/useful.h"
3232
#include "src/core/lib/gprpp/sync.h"
3333
#include "src/core/lib/gprpp/thd.h"
34+
#include "src/core/lib/gprpp/env.h"
35+
#include "src/core/lib/gpr/string.h"
3436

3537
namespace grpc {
3638
namespace {
3739

40+
size_t GetNextingThreadNumFromEnv() {
41+
auto value = grpc_core::GetEnv("GRPC_NEXTING_THREAD_NUM_ENV");
42+
if (!value.has_value()) return 0;
43+
int parse_succeeded = gpr_parse_nonnegative_int(value->c_str());
44+
45+
if (parse_succeeded <= 0) {
46+
return 0;
47+
}
48+
return static_cast<size_t>(parse_succeeded);
49+
}
50+
3851
gpr_once g_once_init_callback_alternative = GPR_ONCE_INIT;
3952
grpc_core::Mutex* g_callback_alternative_mu;
4053

@@ -55,6 +68,13 @@ struct CallbackAlternativeCQ {
5568
cq = new CompletionQueue;
5669
int num_nexting_threads =
5770
grpc_core::Clamp(gpr_cpu_num_cores() / 2, 2u, 16u);
71+
72+
auto threads_limit_env = GetNextingThreadNumFromEnv();
73+
if (threads_limit_env) {
74+
gpr_log(GPR_INFO, "Nexting thread number changed via env from %d to %zd", num_nexting_threads, threads_limit_env);
75+
num_nexting_threads = static_cast<int>(threads_limit_env);
76+
}
77+
5878
nexting_threads = new std::vector<grpc_core::Thread>;
5979
for (int i = 0; i < num_nexting_threads; i++) {
6080
nexting_threads->emplace_back(

0 commit comments

Comments
 (0)