IT评测·应用市场-qidao123.com技术社区
标题:
小米外包(柯莱特)面试题目
[打印本页]
作者:
大连全瓷种植牙齿制作中心
时间:
2025-4-15 05:46
标题:
小米外包(柯莱特)面试题目
小米外包(柯莱特)面试题目
讲述一下Golang的GMP模型
G(Goroutine)M(Machine)P(Processor)
模型组件
G
轻量化的用户态线程,由Go程序运行时管理,可以动态扩容
创建和切换成本低,高并发场景非常适用
M
对应利用系统线程,由内核调理,实行go代码时肯定会绑定一个P
数量多于P,Go在运行时动态创建烧毁M
P
虚拟处理器,管理着当地G队列,数量由配置决定,默认为CPU核心
调理上下文,协调GM资源分配,淘汰全局锁竞争
调理机制
队列布局
当地队列:每个P会维持一个256的当地队列,新G优先加入当前P队列,如果满了转移一半到全局队列
全局队列:全部P共享,用于均衡负载,优先级低于当地队列
实行流程
M绑定P实行G,优先从当地队列、全局队列、网络轮询器及工作盗取来从其他P获取G
工作盗取:P的当地队列为空时,随机选择其他P盗取一半G,提高资源利用率
壅闭处理
系统调用壅闭:M与P解绑,P被其他M获取继续实行。壅闭结束后,G重新加入队列,M缓存备用大概烧毁
网络IO利用:使用netpoller异步处理,G挂起,IO停当后由空闲M实行,制止线程壅闭
抢占调理
Go 1.2引入协作式抢占(函数调用时触发),1.14后支持基于信号的抢占式调理,防止G长时间占用CPU。
模型优势
资源高利用性:P数量限定为CPU核心数,淘汰线程竞争;M动态调整应对壅闭
低耽误切换:当地队列淘汰锁竞争,工作盗取和全局队列均衡负载
高并发支持:轻量级Goroutine和高效调理机制支持数十万并发
总结
GMP模型通过层级化的调理计划,p管理队列,m动态绑定,g灵活切换,结合工作盗取及异步IO处理,实现了高效并发。核心在于淘汰锁竞争、优化资源利用,并通过抢占机制确保公平性。
什么时候使用线程和协程
线程使用场景
适用场景
CPU密集任务:并行盘算时,利用多核性能
依赖线程的生态: 比如传统的多线程代码
低耽误相应:必要利用系统级的优先级调理
缺点
创建烧毁成本高
大量线程容易内存耗尽大概竞争题目
协程使用场景
适用环境
I/O密集型任务:高并发网络请求、文件读写大概数据库访问=》web服务器
高并发轻量级任务: 需同时处理数千个任务=》聊天服务器、微服务网关
资源敏感型应用:内存有限,需制止线程过多=》嵌入式
长处
创建烧毁成本低,用户态调理,栈动态调整
自然制止锁竞争,得当异步编程模型
关键对比
特性
线程
协程
调理
利用系统内核调理 用户态调理(由语言运行时管理)
内存占用
较大(默认MB级栈) 极小(默认KB级栈,可动态扩容)
切换开销
高(需内核参与) 极低(无系统调用)
并发规模
数百到数千 数十万到百万级
适用任务
CPU密集型、需并行 I/O密集型、高并发
开辟复杂度
高(需处理锁、竞态)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4