问题 – 出让时间片

  Go 和 Java 在并发执行上的不同还在于,Java 的多线程是一种抢占式的时间片占用规则,而 Go 的 goroutine 是一种非抢占式的时间片占用规则,也就是说,如果一个 goroutine 在使用 CPU 时间片,那么其他再多的 goroutine 都得阻塞。

  我们可以在每个 goroutine 中控制何时主动出让时间片给其他 goroutine,这可以使用 runtime 包中的 Gosched() 函数实现。

  实际上,如果要比较精细地控制 goroutine 的行为,就必须比较深入地了解 Go 语言开发包中 runtime 包所提供的具体功能。

  上面说的这种属于主动出让时间片的情况,其实往往大多数情况下,是不需要此操作的,因为大部分方法都是带有出让时间片能力的,比如:fmt 包下单 Prinxxx()、向 channel 中写入、从 channel 中读出。

发表评论

电子邮件地址不会被公开。 必填项已用*标注