✍个人博客:Pandaconda-优快云博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
139. Go 线程实现背景
Go 实现的是两级线程模型(M:N),准确的说是 GMP 模型,是对两级线程模型的改进实现,使它能够更加灵活地进行线程之间的调度。
线程 -> CPU 由操作系统调度,协程 -> 线程由 Go 调度器来调度,协程与线程的映射关系有三种线程模型。
140. Go 的内核级线程模型(1:1)
1 个用户线程对应 1 个内核线程,这种最容易实现,协程的调度都由 CPU 完成了。
优点:
- 实现起来最简单
- 能够利用多核
- 如果进程中的一个线程被阻塞,不会阻塞其他线程,是能够切换同一进程内的其他线程继续执行
缺点:
- 上下文切换成本高,创建、删除和切换都由 CPU 完成
141. Go 的用户级线程模型(N:1)
1 个进程中的所有线程对应 1 个内核线程。
优点:
- 上下文切换成本低,在用户态即可完成协程切换
缺点:
- 无法利用多核
- 一旦协程阻塞,造成线程阻塞,本线程的其它协程无法执行