Go 可以充分发挥多核优势,高效运行。
Go 语言的并发模型是 CSP(Communicating Sequential Processes)模型,它通过 goroutine 和 channel 来实现。goroutine 是 Go 语言并发的执行体,channel 是它们之间的通信机制。
协程与线程
协程是一种轻量级的线程,也叫微线程或用户态线程,由用户程序自己控制调度,而线程则是由操作系统内核控制调度。协程的调度完全由用户程序控制,线程的调度由操作系统内核控制。协程和线程的区别主要有以下几点:
- 协程是轻量级的线程,协程的调度完全由用户程序控制,线程是重量级的进程,线程的调度由操作系统内核控制。
- 协程和线程都可以实现程序的并发执行,但是协程的执行效率比线程高很多,协程的切换由用户程序自己控制,线程的切换由操作系统内核控制。
func hello(i int){
println("hello goroutine" + fmt.Sprint(i))
}
func hellogoroutine(){
for i := 0; i < 10; i++ {
go func(j int){
println("hello goroutine" + fmt.Sprint(j))
}(i)
}
time.Sleep(time.Second)
}