网上看到个问题:

  

package main

import (
"fmt"
"time"
) func say(s string) {
for i := ; i < ; i++ {
time.Sleep( * time.Millisecond)
fmt.Println(s)
}
} func main() {
go say("world")
say("hello")
}

只有使用time.sleep(100 * time.Millisecond) 时才会连续打出5个hello world

解释是 go 是非抢占的,只有出让cpu时,另外一个协程才会运行。如果没有time.sleep(100 * time.Millisecond)就只会打出5个hello出来。

还有另外一个协程切换的方式:

package main

import (
"fmt"
  "runtime"
)

func say(s string) {
for i := 0; i < 5; i++ {
    runtime.Gosched()

        fmt.Println(s)

    }
} func main() {
go say("world")
say("hello")
}

这个只是打出了5 个hello 4个world ----原因不明。

比对了下 Gosched() 和 Sleep() 两者运行的时候系统的情况:

package main

import (
// "fmt"
"runtime"
// "time"
) func say(){
for i := ; i < ; i++{
// time.Sleep(1 * time.Millisecond)
runtime.Gosched()
// fmt.Println(s)
}
} func main(){
go say()
say()
}

发现cpu使用率在使用Gosched() 时 比 Sleep() 要高,但是运行的时间比Sleep()的方式明显要短一些。---这里面切换的方式需要在网上找找有没有资料了.

相关:

http://stackoverflow.com/questions/15771232/why-is-time-sleep-required-to-run-certain-goroutines

最新文章

  1. title与alt的区别
  2. C语言解析Ini格式文件
  3. MyBatis Generator自动生成的配置及使用
  4. AJAX-----01远古时期的ajax
  5. Docker之Web-UI
  6. 1068: [SCOI2007]压缩 - BZOJ
  7. Xcode-GitHub第三方库管理工具--CocoaPods
  8. OpenCV中遇到Microsoft C++ 异常 cv::Exception
  9. python+xlsxwriter+PIL自动压图贴图到Excel小工具
  10. Mysql 获取表的comment 字段
  11. C#调用Python脚本打印pdf文件
  12. Java 平时作业四
  13. ubuntu 下redis的安装简介
  14. Matlab_xcorr_互相关函数的讨论
  15. emmc基础技术8:操作模式2-device identification mode
  16. C/C++ 读取16进制文件
  17. 在Linux上使用iptables命令开启对外访问的网络端口
  18. 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树
  19. 阿里云服务器内部dns可能出错
  20. 关于浏览器和IIS基础的简单理解

热门文章

  1. 记录视频“ Why I build Docker&quot;
  2. python 入门学习之环境搭载
  3. 【java】:枚举小demo
  4. C# 模拟上传图片
  5. Maven 整合 spring profile实现多环境自动切换
  6. html5 canvas绘画时钟
  7. C# onverride、abstract、vitrtual、new、sealed
  8. 【学习】JAVA的第一天(补)
  9. 在app中打开appStore中其他app
  10. Android Sqlite数据库相关——实现将 Sqlite 数据库复制到SD 卡