当前位置: 首页 > news >正文

Linux C/C++ 学习日记(37):协程(六):总结

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。

一、recv/send  同步的。

调用,就执行一次(不管有没有数据)

如果是阻塞的,就阻塞在这里等到有数据就取走(程序卡在这,如果是多线程:CPU会释放给别的线程使用)

如果是非阻塞的,去查看,没数据就直接返回了

二、nty_recv / nty_send 异步的

反正我就一定要取走一次数据:

如果没数据,我就加入epoll监听,然后切换到别的协程函数干别的事情,等到epoll响应了,我在回来取走。

tips:

如果不设置超时,形式上来看,nty_recv就相当于是阻塞的recv(实际上内部用的是非阻塞recv,这样才能够切换),如果一直没收到数据,那么就一直不会切换回来,所以说形式上相当于阻塞的recv(区别在于阻塞的recv是线程阻塞,而nty_recv是协程阻塞

三、总的来讲,协程就是仿照线程的用法。使用起来的形式跟线程一毛一样:

线程函数采用同步的编程方式
协程函数跟线程一样也采用同步的编程方式

两者都有异步的性能,阻塞的话,CPU就被调度到别的 线程/协程 去执行


把多线程搞成多协程:

  • 原来的线程函数里面的代码我都不用动,弄个hook,就可以直接把线程函数搞成协程函数了。把pthread_create搞成coroutine_create,创建的就是协程了。
  • 这样下来,就可以用于IO密集型了(实现一fd一协程)

四、线程与协程两者的区别

1. CPU使用数量与切换:

多个协程是运行在一个线程上的,也就是只使用一个CPU,但是协程切换快(用户态)。

多个线程可以使用多个CPU,但是线程切换慢(内核态)。

2. 占用空间:

协程:KB级别,在高并发网络中,可实现1fd1协程

线程:MB级别(linux中为8MB),在高并发网络中,实现不了1fd1协程

3. 在IO密集型中

协程效率高于线程。

4. 在CPU密集型中

一般选择线程,且线程数一般为CPU的内核数,减少切换带来的开销。

http://www.dtcms.com/a/545535.html

相关文章:

  • NVIDIA Jetson Orin NX安装graspnet失败解决方案
  • 网站后台有些不显示自己怎么做外贸网站
  • 有几个网站可以做代发的制作小诗集
  • 迷你电脑主机哪个牌子好?有哪些源头OEM/ODM定制厂商
  • 微信小程序开发案例 | 通讯录小程序(下)
  • 大模型算法面试笔记——多头潜在注意力(MLA)
  • 常州城投建设工程招标有限公司网站泰安网站建设策划方案
  • 南通公司网站建设湖南网站优化公司
  • 做图标的网站广州海珠发布
  • 2022/12 JLPT听力原文 问题四
  • openEuler安装mysql8,流程详细
  • 【Linux】库制作与原理 从生成使用到 ELF 文件与链接原理解析
  • 【开题答辩全过程】以 儿童疫苗接种提醒系统的设计与实现为例,包含答辩的问题和答案
  • 【linux】基础开发工具(2)vim
  • 宁波找网站建设企业如何使用网络营销策略
  • 关于进一步做好网络安全等级保护有关工作的问题释疑-【二级以上系统重新备案】、【备案证明有效期三年】
  • Flink Keyed State 详解之三
  • LangChain4j学习3:模型参数
  • 驻马店做网站哪家好常州微网站建设
  • 深圳网站建设报价网站开发客户来源
  • 仓颉开发鸿蒙应用:深入理解组件生命周期的设计哲学与实践
  • Java 启动脚本-简介版
  • CFX Manager下载安装教程
  • 基于STM32HAL库判断传感器数据和系统定时器外部中断
  • 仓颉语言中的成员变量与方法:深入剖析与工程实践
  • JavaScript是如何执行的——V8引擎的执行
  • GEO:AI 时代流量新入口,四川嗨它科技如何树立行业标杆? (2025年10月最新版)
  • 【牛客刷题-剑指Offer】BM24 二叉树的中序遍历:左根右的奇妙之旅(递归+迭代双解法详解)
  • 宝山网站建设哪家好平面设计免费模板网站
  • 腾讯云 怎样建设网站免费自助建站工具