前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线程/协程/异步的编程模型解读

线程/协程/异步的编程模型解读

作者头像
友儿
发布2023-03-11 17:39:20
2640
发布2023-03-11 17:39:20
举报
文章被收录于专栏:友儿友儿

线程

  • 线程是CPU调度的最小单位
CPU 执行过程图
  • 比如我们有一个单核CPU,目前有3个想要执行的线程,这3个线程在执行过程中先执行1,在下一个时间片cpu让渡出来执行线程2,在下一个时间片cpu让渡出来执行线程3,以此类推,最终将3个线程执行完毕。
  • 如果我们不将CPU进行分片,按顺序先执行完线程1,再执行线程2,最后执行线程3。
线程单核cpu-导出.png
线程单核cpu-导出.png
  • 我们是否有一个疑惑,前者(CPU切片)后者(顺序执行)使用的时间貌似是一样的,并且后者(顺序执行)只切换了2次上下文,这样是不是执行的效率更高呢?那多线程存在的意义有体现在哪里呢?
  • 提到了上面的疑问,我们就不得不说道一下I/O(磁盘的读写、网络的数据传输、音视频的输入输出等),那么我们在编程的中的I/O主要是磁盘I/O网络I/OI/O是非常耗时间的。
cpu-硬盘-内存.png
cpu-硬盘-内存.png
  • 假如我们有CPU、硬盘、内存,要想文件读取,我们最先想到的是CPU直接读取硬盘数据放入内存的变量中,这样在整个读取的过程中整个I/O都被占用的,因而这种方式会造成前者(CPU切片)后者(顺序执行)执行效率差不多的。
  • 但是实际的I/O并不是这样的,实际的I/O的过程中有一个非常重要的东西DMA控制器。在读取文件的过程中,其实CPU不会直接操作硬盘,而是给DMA控制器下达命令来完成文件的读取。首先,CPU 对DMA下达指令(这个指令中包含有磁盘设备信息和要读取的文件位置信息),然后DMA告知硬盘进行文件读取并将读取的文件内容加载到内存变量中,读取完毕之后硬盘会返回反馈一个读取结果完成的信息给到DMA,DMA之后以终端的形式通知CPU,然后CPU去内存中拉取数据,最终拿到数据。
DMA.png
DMA.png
  • 我们通过步骤一下达指令之后,其实CPU就处于闲置状态,就可以执行其他线程。我们现在再此回看单核cpu处理3个线程读取文件,CPU下达指令给DMA后(CPU闲置),假如线程2拿到CPU控制权,同样CPU下达指令给DMA后(CPU闲置),线程3拿到CPU控制权,同样CPU下达指令给DMA后(CPU闲置),CPU可以执行其他线程,最终实现并行读取,提高CPU利用率。另外,DMA进行数据读取是可以复用的,CPU的总线具有多条线路,DMA就可以充分利用这些线路,最终实现并行的读取文件。
112058489.png
112058489.png

协程

  • 协程是类似于编程语言级别的线程,一种用户态的轻量级线程,协程不像线程和进程需要进行系统内核上的上下文切换,协程的上下文切换是由用户自己决定的,有自己的上下文,所以说是轻量级的线程,也称之为用户级别的线程就叫协程,一个线程可以多个协程,线程进程都是同步机制,而协程则是异步。协程没有用户态和内核态的转化,性能会比线程效率更高。

异步

  • cpu 发送指令给DMA就是异步执行读取文件,cpu则会被空闲出来执行别的线程。程序级别的也有很多异步操作,比如充值成功短信通知用户的操作,一般都是异步存于队列。
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程
    • CPU 执行过程图
    • 协程
    • 异步
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com