从零学习go语言(七)

80 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

并发

并发指在同一时间内可以执行多个任务。

Go 语言通过编译器运行时(runtime),从语言上支持了并发的特性。Go 语言的并发通过 goroutine 特性完成。goroutine 类似于线程,但是可以根据需要创建多个 goroutine 并发工作。goroutine 是由 Go 语言的运行时调度完成,而线程是由操作系统调度完成。

比如说一个人在听音乐、吃东西和敲代码。如果是按从上到下执行的话是听完音乐吃东西,吃完东西敲代码,但是如果是并发的话就可以在听音乐的同时吃东西和敲代码。并发可以让编写的程序在同一时刻做很多事情。

进程和线程

启动软件时,操作系统会为软件创建一个进程,这个进程是该软件的工作空间,它包含了软件运行所需的所有资源。线程时进程的执行空间,一个进程可以有多个线程,线程被操作系统调度执行。

image.png

协程

Go语言中没有线程的概念,只有协程(goroutine)。Go语言的并发是由Go自己所调度的,自己决定同时执行多少个协程,什么时候执行哪几个。

go 函数名( 参数列表 )

通过go关键字加上一个方法或者一个方法的调用就可以启动一个协程。同一个程序中的所有协程共享同一个地址空间。

示例:

package main

import (
"fmt"
"time"
)

func say(s string) {
   for i := 0; i < 5; i++ {
      time.Sleep(100 * time.Millisecond)
      fmt.Println(s)
   }
}

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

以上程序的time.Sleep是让主线程等待一段时间,防止主线程结束退出后程序没有执行完毕。