对线程、协程和同步异步、阻塞非阻塞的理解
线程、协程
参考文章:goroutine 和线程的区别
对比项 | 线程 | 协程 |
---|---|---|
内存消耗 | 1M | 2K,自动扩容 |
创建销毀 | 内核级 | 用户级 |
切换 | 需保存恢复16个通用寄存器、4个段寄存器 16个XMM、16个AVX、PC、FP、SP |
需保存恢复PC、BP、SP |
(耗时) | 1000-1500纳秒 | 200纳秒 |
同步异步、阻塞非阻塞
当应用程序通过系统调用向操作系统发起请求时,此时:
- 应用程序是调用者
- 操作系统是执行者
阻塞非阻塞是针对调用者而言的:
- 阻塞是死等结果
- 非阻塞是发出请求后干别的,后续取结果
同步异步是针对执行者而言的:
- 同步是收到请求->处理请求->返回结果
- 异步是收到请求立即返回ok->处理请求->异步通知结果
所以个人觉得用“同步异步、阻塞非阻塞”来描述网络模型是非常容易产生混淆的,不如用IO复用、信号驱动IO来描述,参考简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: