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。

相关推荐
2601_962885721 天前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
_孤傲_1 天前
快速掌握 MySQL 语法
数据库·后端·mysql
Wang's Blog1 天前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里1 天前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
IT_陈寒1 天前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
天外飞雨道沧桑1 天前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl1 天前
Yup 跨端三方库仓颉适配全流程
java·开发语言
步行cgn1 天前
Thymeleaf 编辑表单详解:从字段回填到模拟 PUT 请求
后端
运维行者_1 天前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
“AI国潮设计-小江”1 天前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc