Go语言的简洁并发编程

进程是操作系统分配资源的基本单位,线程才是执行任务的最小执行单位。一个进程内可以有多个线程。而Go语言的并发模型则是使用了Coroutine协程。协程也是通过线程来执行的。Go语言调度算法会为每个线程提供一个Coroutine执行队列。当有一个Coroutine执行了一个系统调用并且阻塞时,该线程会被挂起,那该线程就没有办法继续去执行其他Coroutine了,此时Go语言的调度算法就将该线程的Coroutine队列转移到其他线程的队列当中。当该线程从阻塞恢复后,再从其他线程的Coroutine队列拿一些回来执行,使得各个线程的执行效率得到有效保证,这也是Go语言在并发方面这么厉害的原因。

它的简洁之处在于启动Coroutine的方式,只需要关键字go加函数调用,如:

go 复制代码
package main

import "fmt"
import "time"

func main() {

	fmt.Println("start")
	go func() { // 开协程
		fmt.Println("Corountine")
	}()
	time.Sleep(time.Second * 1)
	fmt.Println("end")
}

在Go语言中,程序一启动,main就是第一个Coroutine。

相关推荐
考虑考虑2 小时前
数据库中的EXISTS
运维·数据库·后端
lsswear3 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理3 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼3 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
软件课代表CiCi4 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz4 小时前
MLIR OpBuilder
开发语言·python·mlir
红宝村村长5 小时前
windows笔记本双系统ubuntu设置
开发语言
菜鸟~noob2337 小时前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab
我不会起名字3227 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
苏三说技术8 小时前
为什么越来越多人用OpenWiki?
后端