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

线程、协程

参考文章: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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!