为什么用户级别的线程 goroutine 比操作系统线程更轻量级?
题目来源:字节跳动
答案:
1、首先 Go 语言中的 goroutine 进行切换时,比操作系统线程效率高。
Go 语言中,协程的切换发生在用户态,而操作系统线程切换发生在内核态,操作系统中进行线程的切换比协程的切换多了时钟中断与系统调用等步骤,所以导致其效率低下。
2、Go 协程的内存占用比操作系统中的线程占用小。
一般执行 goroutine 只会占用极少的栈内存,一般为 4 kb,而在操作系统中,创建并执行一个新的线程默认占用内存空间为 1 mb,远远大于 goroutine。