This is an automated email from the ASF dual-hosted git repository.

guangmingchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new b990d5c5 Add flag for parking lot no signal when no waiter, the 
default is false (#3079)
b990d5c5 is described below

commit b990d5c5c5ea7f8bdca8de72cddce9d2ebed6938
Author: Bright Chen <[email protected]>
AuthorDate: Mon Sep 1 20:46:02 2025 +0800

    Add flag for parking lot no signal when no waiter, the default is false 
(#3079)
---
 src/bthread/parking_lot.h    | 21 +++++++++++++++++----
 src/bthread/task_control.cpp |  4 +++-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/bthread/parking_lot.h b/src/bthread/parking_lot.h
index 315e9956..bbc9a7c3 100644
--- a/src/bthread/parking_lot.h
+++ b/src/bthread/parking_lot.h
@@ -22,11 +22,14 @@
 #ifndef BTHREAD_PARKING_LOT_H
 #define BTHREAD_PARKING_LOT_H
 
+#include <gflags/gflags.h>
 #include "butil/atomicops.h"
 #include "bthread/sys_futex.h"
 
 namespace bthread {
 
+DECLARE_bool(parking_lot_no_signal_when_no_waiter);
+
 // Park idle workers.
 class BAIDU_CACHELINE_ALIGNMENT ParkingLot {
 public:
@@ -40,13 +43,15 @@ public:
         int val;
     };
 
-    ParkingLot() : _pending_signal(0), _waiter_num(0) {}
+    ParkingLot()
+        : _pending_signal(0), _waiter_num(0)
+        , 
_no_signal_when_no_waiter(FLAGS_parking_lot_no_signal_when_no_waiter) {}
 
     // Wake up at most `num_task' workers.
     // Returns #workers woken up.
     int signal(int num_task) {
         _pending_signal.fetch_add((num_task << 1), 
butil::memory_order_release);
-        if (_waiter_num.load(butil::memory_order_relaxed) == 0) {
+        if (_no_signal_when_no_waiter && 
_waiter_num.load(butil::memory_order_relaxed) == 0) {
             return 0;
         }
         return futex_wake_private(&_pending_signal, num_task);
@@ -64,9 +69,13 @@ public:
             // Fast path, no need to futex_wait.
             return;
         }
-        _waiter_num.fetch_add(1, butil::memory_order_relaxed);
+        if (_no_signal_when_no_waiter) {
+            _waiter_num.fetch_add(1, butil::memory_order_relaxed);
+        }
         futex_wait_private(&_pending_signal, expected_state.val, NULL);
-        _waiter_num.fetch_sub(1, butil::memory_order_relaxed);
+        if (_no_signal_when_no_waiter) {
+            _waiter_num.fetch_sub(1, butil::memory_order_relaxed);
+        }
     }
 
     // Wakeup suspended wait() and make them unwaitable ever. 
@@ -79,6 +88,10 @@ private:
     // higher 31 bits for signalling, LSB for stopping.
     butil::atomic<int> _pending_signal;
     butil::atomic<int> _waiter_num;
+    // Whether to signal when there is no waiter.
+    // In busy worker scenarios, signal overhead
+    // can be reduced.
+    bool _no_signal_when_no_waiter;
 };
 
 }  // namespace bthread
diff --git a/src/bthread/task_control.cpp b/src/bthread/task_control.cpp
index 7d121349..0b34955b 100644
--- a/src/bthread/task_control.cpp
+++ b/src/bthread/task_control.cpp
@@ -45,6 +45,9 @@ DEFINE_bool(task_group_set_worker_name, true,
 
 namespace bthread {
 
+DEFINE_bool(parking_lot_no_signal_when_no_waiter, false,
+            "ParkingLot doesn't signal when there is no waiter. "
+            "In busy worker scenarios, signal overhead can be reduced.");
 DEFINE_bool(enable_bthread_priority_queue, false, "Whether to enable priority 
queue");
 
 DECLARE_int32(bthread_concurrency);
@@ -189,7 +192,6 @@ TaskControl::TaskControl()
     , _signal_per_second(&_cumulated_signal_count)
     , _status(print_rq_sizes_in_the_tc, this)
     , _nbthreads("bthread_count")
-    , _enable_priority_queue(FLAGS_enable_bthread_priority_queue)
     , _priority_queues(FLAGS_task_group_ntags)
     , _pl_num_of_each_tag(FLAGS_bthread_parking_lot_of_each_tag)
     , _tagged_pl(FLAGS_task_group_ntags)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to