diff options
| author | Maksym Sobolyev <sobomax@sippysoft.com> | 2024-11-20 19:27:40 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-11-21 16:24:21 +0000 |
| commit | 21b5f2637a37fe2fece7e6bf3d5f97a9520693ba (patch) | |
| tree | ba9bbf54ff94e8eed06ba12938d7f79a325da243 /src/runtime/netpoll_kqueue_pipe.go | |
| parent | 844426104a901b68f3a8c7a7ca96d910b03fb054 (diff) | |
| download | go-21b5f2637a37fe2fece7e6bf3d5f97a9520693ba.tar.xz | |
runtime: utilize EVFILT_USER more effectively
Re-work kqueue_event wakeup logic to use one-shot events. In an
event of waking up a wrong thread, simply re-post the event.
This saves close to 1 system call per wakeup on average, since
chances of non-blocking poller picking it up is pretty low.
Change-Id: I202d0d57a31d91ac5354ea075215f647c65790d3
GitHub-Last-Rev: e707d4732683702bd2989f07230a2f34354c288b
GitHub-Pull-Request: golang/go#70408
Reviewed-on: https://go-review.googlesource.com/c/go/+/628975
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/runtime/netpoll_kqueue_pipe.go')
| -rw-r--r-- | src/runtime/netpoll_kqueue_pipe.go | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/runtime/netpoll_kqueue_pipe.go b/src/runtime/netpoll_kqueue_pipe.go index 98f73e84d2..cf1e2afa83 100644 --- a/src/runtime/netpoll_kqueue_pipe.go +++ b/src/runtime/netpoll_kqueue_pipe.go @@ -63,7 +63,11 @@ func isWakeup(ev *keventt) bool { return false } -func drainWakeupEvent(_ int32) { +func processWakeupEvent(_ int32, isBlocking bool) { + // Only drain if blocking. + if !isBlocking { + return + } var buf [16]byte read(int32(netpollBreakRd), noescape(unsafe.Pointer(&buf[0])), int32(len(buf))) } |
