前言
Goroutine作为go语言核心的特色,与其他语言线程并不太一样,其并发性远好于其他语言多线程实现方式,那么Goroutine和线程的区别有哪些呢?
区别
内容 | goroutine | 线程 |
---|
内存占用 | 动态栈(2K~1G) | 固定栈(2M) |
调度 | 自带的调度器,不用内核上下文 | 调用scheduler内核函数状态保存到内存中 |
GOMAXPROCS | 可以通过该参数设置cpu并行数,并且阻塞休眠都不会消耗其他Goroutine去调度 | 需要系统线程去调度 |
标识 | 没有ID,无法通过全局查找某个goroutine | 有ID,可以全局查询 |
结论
go语言轻量的goroutine设计,使其在高并发情况下能够拥有出色的性能