go 协程(Goroutine)

Go 协程是什么?

Go 协程是与其余函数或方法一块儿并发运行的函数或方法。Go 协程能够看做是轻量级线程。与线程相比,建立一个 Go 协程的成本很小。所以在 Go 应用中,经常会看到有数以千计的 Go 协程并发地运行。程序员

Go 协程相比于线程的优点

  • 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 kb,而且能够根据应用的需求进行增减。而线程必须指定堆栈的大小,其堆栈是固定不变的。
  • Go 协程会复用(Multiplex)数量更少的 OS 线程。即便程序有数以千计的 Go 协程,也可能只有一个线程。若是该线程中的某一 Go 协程发生了阻塞(好比说等待用户输入),那么系统会再建立一个 OS 线程,并把其他 Go 协程都移动到这个新的 OS 线程。全部这一切都在运行时进行,做为程序员,咱们没有直接面临这些复杂的细节,而是有一个简洁的 API 来处理并发。
  • Go 协程使用信道(Channel)来进行通讯。信道用于防止多个协程访问共享内存时发生竞态条件(Race Condition)。信道能够看做是 Go 协程之间通讯的管道。咱们会在下一教程详细讨论信道。

如何启动一个 Go 协程?

调用函数或者方法时,在前面加上关键字 go,可让一个新的 Go 协程并发地运行。并发

让咱们建立一个 Go 协程吧。函数

package main

import (
    "fmt"
)

func hello() {
    fmt.Println("Hello world goroutine")
}
func main() {
    go hello()
    //启动一个协程,协程的调用会当即返回,程序会继续执行下一行,由于主协程结束,程序终止,其余的协程也会终止
   //time.Sleep(1 * time.Second)  因此咱们须要加这行代码才能体现并发
    fmt.Println("main function")
}

这就是协程,写起来很是的简便!spa

相关文章
相关标签/搜索