序
Go语言在服务端程序的开发中能够以最简单高效的方式来解决问题,它用轻量级方法来处理并发,使程序性能大幅提高。对于服务端程序的开发工作中,开发人员最在意的并发及同步安全问题,Go语言提供了自已独特的解决方案。
并发的单位
进程
进程是操作系统结构的基础,操作系统进行资源分配和调度的基本单位。应用程序在运行中使用和维护各类资源的容器。
线程
线程是操作系统能够进行运算调度的最小单位。线程包含在进程中,进程实际分配CPU时间片进行运作的单位。
协程
协程类似子例程,是一种比线程更轻量级的单位。它在线程分配到的CPU时间片基础上由语言(虚拟机)进行调度控制。这样就避免了线程切换过程中的资源损耗,从而大大提高了程序的性能。
Go语言的并发实现使用的是goroutine,属于协程的一种。
1.goroutine
goroutine的简单使用
使用go关键字调用goroutine
例1-1 goroutine的伪代码
//调用命名函数 go myFunc() … //调用匿名函数 go func() { // TODO }() … |
例1-2 一个完整的调用:
package main
import ( "fmt" "time" )
func myGoroutine(c int) { for i:=0; i<5; i++ { fmt.Printf("myGoroutine-%c %d\n",c,i) time.Sleep(time.Microsecond) } }
func main() { go myGoroutine('A') go myGoroutine('B') // 注意这个sleep ti |