对线程、协程和同步异步、阻塞非阻塞的理解

线程、协程#

参考文章: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 协议》,转载必须注明作者和本文链接