mirror of
https://github.com/golang/go
synced 2024-10-14 20:05:36 +00:00
syscall: try non-blocking stdio on wasip1
Try to set stdio to non-blocking mode before the os package calls NewFile for each fd. NewFile queries the non-blocking flag but doesn't change it, even if the runtime supports non-blocking stdio. Since WebAssembly modules are single-threaded, blocking system calls temporarily halt execution of the module. If the runtime supports non-blocking stdio, the Go runtime is able to use the WASI net poller to poll for read/write readiness and is able to schedule goroutines while waiting. Change-Id: I1e3ce68a414e3c5960ce6a27fbfd38556e59c3dc Reviewed-on: https://go-review.googlesource.com/c/go/+/498196 Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> Auto-Submit: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> Reviewed-by: Achille Roussel <achille.roussel@gmail.com> Reviewed-by: Heschi Kreinick <heschi@google.com> Run-TryBot: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
1dbbafc70f
commit
13529cc5f4
|
@ -11,6 +11,20 @@ import (
|
|||
"unsafe"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// Try to set stdio to non-blocking mode before the os package
|
||||
// calls NewFile for each fd. NewFile queries the non-blocking flag
|
||||
// but doesn't change it, even if the runtime supports non-blocking
|
||||
// stdio. Since WebAssembly modules are single-threaded, blocking
|
||||
// system calls temporarily halt execution of the module. If the
|
||||
// runtime supports non-blocking stdio, the Go runtime is able to
|
||||
// use the WASI net poller to poll for read/write readiness and is
|
||||
// able to schedule goroutines while waiting.
|
||||
SetNonblock(0, true)
|
||||
SetNonblock(1, true)
|
||||
SetNonblock(2, true)
|
||||
}
|
||||
|
||||
type uintptr32 = uint32
|
||||
type size = uint32
|
||||
type fdflags = uint32
|
||||
|
|
Loading…
Reference in a new issue