【C++20】把epoll封装成协程库,支持异步读写TCP套接字,有手就行(中)

作者: 双笙子佯谬分类: 计算机技术 发布时间: 2024-03-24 07:07:53 浏览:9872 次

【C++20】把epoll封装成协程库,支持异步读写TCP套接字,有手就行(中)

罗斯刀子:
又是我沙发[doge]好了下集 io_uring 那看来我的毕设可以顺产了

【回复】[doge]你小汁就天天蹲点是吧
picobsd:
我请教个问题啊,这个携程其实它也是运行在线程上的对吧? 可能线程和携程之间有一个类似m对n的关系,那么在携程里调用任何函数都必须特别小心 比如类似sleep yield 一类的跟调度有关的都不能调 因为一旦调用就会影响到,一些你不知道的其他的携程,因为他也跑到这个同样的same thread上 是不是有这个问题

【回复】首先,单线程也可以协程。其次协程中确实不能调用任何传统的阻塞函数比如sleep,send,recv,会把当前线程卡死。而是必须调用协程库提供的sleep,send,recv,这些协程库提供的函数不会卡住当前线程,而是在等待sleep的时间内让当前线程继续执行其他协程,等sleep时间到了再切换回这个协程。所以协程中不能调用任何传统的阻塞函数,否则就会影响其他协程的正常运行,必须调用协程库封装好的版本。
【回复】回复 @picobsd :你如果还要用带阻塞的第三方库,那就说明你的场景不适合协程,协程就是做服务器用的,客户端不用,客户端可不需要同时并发几万个请求,把几万个任务压缩到几十个线程的池里去做,这个带来的性能提升远远可以掩盖不兼容捞第三方库的缺点,要是不追求性能的场景你也没必要写cpp,写python不香嘛
【回复】回复 @双笙子佯谬 :如果真是这样,那问题可就大了,比如epool那些调用,也不能在携程里掉 因为他也会把那个绑定在那个县城的携程全给 re schedule 还有一些县城锁@也不能掉,这里还有一个间接的问题,就是如果你调用第三方库的函数,你不知道他在库里做了什么,有可能他调用包含yield。sleep指令的stuff 这个鞋城的坑可太大了
等疾风:
小彭老师真的肝,凌晨6点做视频[大哭]

该昵称ID已经存在:
平时都是做嵌入式,唯一一次接触到网络编程还是安卓前端开发的时候,用到了http[笑哭]

星也--live:
小彭老师出品全是精品,先点赞再观看[脱单doge]

传说之下拉猹:
姐妹儿 你好香[星星眼][星星眼][星星眼]

IO C++ C++20 并发 promise coroutine await 协程 异步 epoll

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!