- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
下面的代码片段,
package main
import (
"fmt"
"runtime"
)
func main() {
runtime.GOMAXPROCS(1)
var s string
done := make(chan bool)
go func() {
fmt.Scanln(&s)
fmt.Println(s)
done <- true
}()
var i int
for i = 0; i < 1e10; i++ {
}
fmt.Println(i)
<-done
}
运行它,快速输入几个字符,例如abcd
在for
循环结束之前;最后点击 Enter
。据我所知,for
循环中没有可用的 yield 点用于 Gosched
将主 goroutine 切换到子例程,为什么它迅速甚至在 for
循环完成之前就打印了 abcd
?
abcd10000000000
abcd
最佳答案
它是随机的,您无法预测输出。因为在您的情况下,go 例程将运行,然后 for 循环将执行。现在,如果 go 例程在 for 循环完成其迭代之前完成,那么它将首先打印 go 例程中的值并将值发送到 done
channel ,然后它将打印 i< 的值
。 done
channel 将等待,直到 go 例程在其上发送值。
例如,如果您尝试仅扫描 as
然后输入 fast 您的值将在 go 例程中首先打印,然后 10000000000
将在最后打印,因此这取决于if go 例程将在 for 循环完成之前执行。
运行时可以分配比 GOMAXPROCS
的值更多的线程来服务多个未完成的 I/O 请求。 GOMAXPROCS
只影响实际可以同时执行的 goroutine 数量;在系统调用中可能会阻塞任意更多。
关于go - 除了 Gosched 还有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570364/
下面的代码片段, package main import ( "fmt" "runtime" ) func main() { runtime.GOMAX
在 a version prior to the release of go 1.5 of the Tour of Go website ,有一段代码看起来像这样。 package main impo
我正在使用一个开源软件包,该软件包利用runtime.Gosched()等待资源可用。并发现这可能会导致较高的CPU使用率。可以将代码简化如下: func wait() { for {
通过 Go by Example: Atomic Counters 。代码示例在调用 atomic.AddUint64 之后调用 runtime.Gosched。 atomic.AddUint64 被
我是一名优秀的程序员,十分优秀!