Item | 线程 | Go例程 |
---|---|---|
栈大小 | 固定大小,一般为2MB | 变长大小,初始大小一般为2KB,运行时视需要扩展,最大可达1GB |
调度器 | 内核调度器scheduler,每隔一段时间会有一个硬件定时器超时,导致scheduler被调用,scheduler会中断当前线程,并保存线程上下文,切换到另外的线程执行,每次调度都涉及用户态/内核态的切换 | Go语言自带的调度器,采用m:n调度,即将m个go例程分发到n个操作系统线程,go例程切换不需要在用户态和内核态之间的切换,因此效率更高 |
ID | 启动线程后会返回一个线程ID,可以用以后续保持类似map的本地存储结构,但这会导致类似全局变量滥用的类似问题 | 无ID |
相关文章
- 01-03python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)
- 01-03操作系统中的进程同步与Window中利用内核对象进行线程同步的关系
- 01-03线程同步(互斥锁与信号量的作用与区别)
- 01-03CIL锁,GIL与线程池的区别,进程池和线程池,同步与异步
- 01-03JUC多线程:Lock锁介绍、ReentrantLock与synchronized的区别
- 01-03Go例程与操作系统线程的区别
- 01-03进程与线程的区别
- 01-03线程锁(互斥锁)与GIL锁的区别
- 01-03window.history.back(-1);与window.go(-1);的区别
- 01-03Golang 进程、线程与协程的区别