可以让程序并发和并行的运行,增加程序运行速度
并发: 多个线程同时竞争一个位置,竞争到才可以执行,每个时间段只有一个线程在执行
并行:多个线程可以同时执行,每一个时间段,可以有多个线程同时执行。
通俗来说多线程程序在单核CPU上运行是并发,多线程程序在多核CPU上运行就是并行,如果线程数大于CPU核数,则多线程程序在多个CPU上面运行既有并行又有并发
golang 中的主线程:在一个Golang程序的主线程上可以启用多个协程。golang中多协程可以实现并行和并发。
协程:可以理解为用户级线程,这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的。Golang的一个特色是从语言层面原生支持携程,在函数或者方法前面加Go关键词就可以创建一个协程。go的协程就是goroutine.
主线程如果执行完毕后,想要等待携程完成,在退出。
通过sync.WaitGroup 可以实现主线程等待协程执行完毕
var wg sync.WaitGroupfunc test() {for i:= 0; i < 10; i++ {fmt.Println("test() 你好 gloang", i)}wg.Done() // 协程计数器加-1
}func main(){wg.Add(1) // 协程计数器 +1go test() //表示开启一个协程for( i:= 0; i< 10; i++ {fmt.Println("main ",i)}wg.Wait() //等待协程计数器为0 退出
}
go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程来同时执行Go代码。默认值是机器上的CPU核心数。例如在一个8核的机器上,调度器会把Go代码同时调度到8个os线程。
上一篇:常用的Java工具类
下一篇:Java文件读写数据流