博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 并发二(调度)
阅读量:6799 次
发布时间:2019-06-26

本文共 467 字,大约阅读时间需要 1 分钟。

  hot3.png

golang 并发二(原理)

每个操作系统都有一个固定大小的栈内存,用户保存函数的局部变量。但是空能会这个固定大小显然不太灵活。而goroutine在生命周期开始时申请一个很小的栈,与操作系统线程类似,用于保存函数调用期间的局部变量。本质区别是它的大小不是固定的,可以按需增大和缩小。

操作系统线程由内核进行调度,每隔几秒,cpu调用内核函数,暂停正在运行的线程,并将执行信息保存到内存,之后找到下一个需要执行的线程,然后从内存中恢复执行信息,最后执行线程。由于保存了一个线程的状态到了内存,并且从内存恢复了另一个线程的状态,所以进行了上下文切换。这是一个比较慢的过程。

go运行时包含一个自己的调度器,可以调用m个goruotine到n个操作系统线程,与操作系统线程调度不同的是,go调度器不是由时钟来决定的,而是有特定的go语言结构触发的。

java当中每一个线程都有一个独特的标识,但是goroutine没有提供可供程序员访问的标识。

转载于:https://my.oschina.net/mrrdai/blog/1784745

你可能感兴趣的文章
医药吧手机版的发布
查看>>
threading
查看>>
Excel中始终保持标题行可见
查看>>
MySQL5解压缩版windows下安装配置应用总结
查看>>
VMware View环境的搭建--VMware View4.5架构介绍
查看>>
直接插入排序
查看>>
浅谈Java接口
查看>>
openstack issue 5
查看>>
网站群建设-->营造自己的网络圈品牌
查看>>
2013/10/14,第1天,小雨
查看>>
安装qwt-6.1.0时 make出错 :Project ERROR: Unknown module(s) in QT: svg
查看>>
go语言学习-变量的问题
查看>>
Yii2获取配置文件信息
查看>>
配置管理小报110228-2:在linux上自动更新同步系统时间方法
查看>>
NetWorker+mhvtl后端结合公司的消冗文件系统为啥不能消冗?
查看>>
Tsung学习笔记
查看>>
(进阶)数据库集群的分布式事务、两阶段提交协议、三阶提交协议
查看>>
Linux/Unix下ODBC的安装、配置与编程
查看>>
Skynet 通过组播(Multicast)实现一个简单的世界频道
查看>>
HTML5定稿一周年,你必须要重新认识HTML5了
查看>>