Skip to content

Commit a46cee3

Browse files
committed
feat: sleep 10ms for epoll wait
1 parent 11edf6b commit a46cee3

File tree

5 files changed

+17
-116
lines changed

5 files changed

+17
-116
lines changed

connstate/poll_bsd.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package connstate
2020
import (
2121
"sync/atomic"
2222
"syscall"
23+
"time"
2324
"unsafe"
2425
)
2526

@@ -29,15 +30,22 @@ type kqueue struct {
2930

3031
func (p *kqueue) wait() error {
3132
events := make([]syscall.Kevent_t, 1024)
33+
timeout := &syscall.Timespec{Sec: 0, Nsec: 0}
34+
var n int
35+
var err error
3236
for {
33-
n, err := syscall.Kevent(p.fd, nil, events, nil)
37+
n, err = syscall.Kevent(p.fd, nil, events, timeout)
3438
if err != nil && err != syscall.EINTR {
3539
// exit gracefully
3640
if err == syscall.EBADF {
3741
return nil
3842
}
3943
return err
4044
}
45+
if n <= 0 {
46+
time.Sleep(10 * time.Millisecond)
47+
continue
48+
}
4149
for i := 0; i < n; i++ {
4250
ev := &events[i]
4351
op := *(**fdOperator)(unsafe.Pointer(&ev.Udata))

connstate/poll_linux.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ package connstate
1717
import (
1818
"sync/atomic"
1919
"syscall"
20+
"time"
2021
"unsafe"
21-
22-
isyscall "github.com/cloudwego/gopkg/internal/syscall"
2322
)
2423

2524
const _EPOLLET uint32 = 0x80000000
@@ -31,13 +30,17 @@ type epoller struct {
3130
//go:nocheckptr
3231
func (p *epoller) wait() error {
3332
events := make([]syscall.EpollEvent, 1024)
33+
var n int
34+
var err error
3435
for {
35-
// epoll wait is a blocking syscall, so we need to call entersyscallblock to handoff P,
36-
// and let the P run other goroutines.
37-
n, err := isyscall.EpollWait(p.epfd, events, -1)
36+
n, err = syscall.EpollWait(p.epfd, events, 0)
3837
if err != nil && err != syscall.EINTR {
3938
return err
4039
}
40+
if n <= 0 {
41+
time.Sleep(10 * time.Millisecond)
42+
continue
43+
}
4144
for i := 0; i < n; i++ {
4245
ev := &events[i]
4346
op := *(**fdOperator)(unsafe.Pointer(&ev.Fd))

internal/syscall/sys_epoll_linux.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

internal/syscall/sys_epoll_linux_arm64_.go

Lines changed: 0 additions & 44 deletions
This file was deleted.

internal/syscall/unsafe.go

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)