本质上,goroutine 就是协程。
创新互联服务项目包括市南网站建设、市南网站制作、市南网页制作以及市南网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,市南网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到市南省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
不同的是,Golang 在 runtime、系统调用等多方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时,会主动把当前 goroutine 的CPU (P) 转让出去,让其他 goroutine 能被调度并执行,也就是 Golang 从语言层面支持了协程。
Golang 的一大特色就是从语言层面原生支持协程,在函数或者方法前面加 go关键字就可创建一个协程。 (推荐学习:go)
协程(coroutine)是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。
GO版本:go version go1.4.2 linux/amd64
测试环境:
[root@localhost mpro]# more /proc/cpuinfo | grep "model name" model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz [root@localhost mpro]# [root@localhost mpro]# grep MemTotal /proc/meminfo MemTotal: 3868776 kB [root@localhost mpro]# getconf LONG_BIT 64 [root@localhost mpro]# more /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
测试用例:
package main import ( "time" ) func main() { for i := 0; i < 200000; i++ { go func() { time.Sleep(5 * time.Second) }() } time.Sleep(10 * time.Second) }
执行程序前:
top - 18:53:19 up 19 min, 3 users, load average: 0.00, 0.04, 0.11 Tasks: 522 total, 1 running, 521 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3868776 total, 3327732 free, 235764 used, 305280 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 3397344 avail Mem
执行程序后:
top - 18:53:37 up 19 min, 3 users, load average: 0.00, 0.04, 0.11 Tasks: 524 total, 1 running, 523 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.2 us, 10.6 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3868776 total, 2793732 free, 752512 used, 322532 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 2880016 avail Mem
总结:20万个协程占用了500M内存 50万KB
平均一个协程占用2.5KB
以上就是golang 协程占多大内存的详细内容,更多请关注创新互联其它相关文章!