【协程革命】C++协程上手体验 干爽无废话 纯粹不卖课 全程字幕

作者: 等疾风分类: 计算机技术 发布时间: 2022-07-28 08:00:00 浏览:61758 次

【协程革命】C++协程上手体验 干爽无废话 纯粹不卖课 全程字幕

编译原理及实践:
其实,CPU能做的事情是很丰富的,和如今编程能做出的东西只是其冰山一角,瓶颈还是人类的理解能力,为了驾驭图林机,我们给它绑上了手脚,才有了这么多工程里的概念,栈,线程,协程,都是。硬要说的话这些都不优雅。 优雅的编程一定是纯描述式的,函数式编程。编译器越来越智能,从数学上理解一个程序,再转成代码。这样也将是最高效的。

【回复】CPU就不是函数式编程的,是命令式的,现在电脑上所谓的函数式编程只是把函数式编程转换成的命令式,而且我们可以证明这两种方式的完备性是一样的,所以这两种编程方式可以实现的东西都是一模一样的,显然命令式更为简便,函数式废脑子。但是函数式的优点就是你写的程序绝对是非常正确的,但是难以维护,一出问题全部都要重写,相比之下命令式编程效率更高,维护性更强
【回复】回复 @snake1817 :连个goto都被人骂疯了,软件复杂到一定程度本身就会出问题,和硬件没关系了。
【回复】那应该要把静态类型系统发扬光大。rust就有点这个意味了,在类型上动了很多手脚,但是写函数式还是不咋滴。这要求编译器极其厉害,类型系统设计得很好。
caejws25:
我记得协程对比轻量级进程好像有什么缺陷吧 不然协程就是业界标准了,也没必要搞那么多线程模型

【回复】回复 @等疾风 :单纯的协程没办法用多核,要用多核必须用线程。 go一开始是纯协程,后来为了利用多核性能也改成线程池了
【回复】看你是io密集型操作还是cpu密集型操作 爬虫这种协程就够了 大量cpu运算还是多线程
【回复】协程的DEBUG是大问题,尤其加上生命周期,到时候崩溃可就不止是你的程序了
嗯哼099:
学习了,c++的协程原来这么简单,比lua的好理解多了

【回复】回复 @蚌妮氓 : 关于Lua支持不支持多线程的问题,我曾经当面怼过Ierusalimsky。他认为使用C创建线程,并使用一些message passing的库在线程之间传递消息,也是可以支持多线程的。我认为除非Lua有个自己的memory model(类似C++11的基于happens-before的那种),否则都不算语义严谨。不过,回头想想,如果Lua使用摩登C11来编译,并在消息传递的部分加以恰当的同步(加锁等),应该也算能严谨地实现多线程。
【回复】如果你说的是协程(两个可以互相调用,互相暂停/继续,交替运行的过程),我反而觉得lua更直接一些;但是如果你说的是“异步开发”框架,就是可以用await操作来让自己等待一下,等io可用以后再继续的编程风格,c++20的这套东西似乎就是为async/await设计的,但Lua也可以做到,而且因为是stackful协程,甚至比C++20还简单,连co_await都可以藏在函数里面。参考一下“levent”库。有个echo例子,和up主的C++20的思想差不多,而且await(即协程切换操作)被封装在库里了。https://github.com/xjdrew/levent/blob/master/examples/echo.lua
【回复】lua协程很吊的。可惜不支持多线程,毕竟只是个脚本。
循环到天亮:
不能说线程慢,是线程切换的开销大于协程。很多时候一个线程会绑定固定的一个物理内核(比如nginx),可以避免了线程上下文切换的问题。

王信之是是是我:
不如抽空讲讲自己的工具链 大家伙明显对你vscode配置更好奇

欲与鱼与雨:
越用越感觉java弱鸡,先不说没有协程,最近刚学到泛型,发现java开发者大佬的短视,为了兼容旧代码,竟然给java的泛型搞了个类型擦除,无法理解,这样的泛型都只能称之为假泛型,用起来不爽的一批,去学.net这些,但资源又少的可怜,不会英文出个问题都不知道上哪去问,java不知道什么时候来波大更新,这么好的生态和资源别浪费了

【回复】Java能把C#几年前玩剩的东西弄明白就不错了[doge] 国内就是Java垄断的环境,还是得学好英文出去外面看看世界[滑稽]
【回复】生态和技术先进,有时候是相背的。只能说java其实侧重的是工程性
9EI3AQ7:
想看协程+网络编程 才发现up只发了一个视频 已经准备好期期三连了 毕竟网上能找到讲这部分知识的真是太少了

小蓝蓝:
2012年在c#里就用async await了,后来ts跟上了,后来js自带了,现在c++终于有了,10年了。

【回复】还真不是,标准化之前的C++就有协程,这就是他当时愈发受欢迎的原因之一。后来标准化之后,协程被踢了出去。根据C++之父的说法,我记得好像是当时Oracle认为这个不是重点。
【回复】回复 @小蓝蓝 :.....ucontext 和fiber存在超过20年了... 为啥会是异步? 你要说有栈无栈还能打出狗脑子
【回复】比无间道陈永仁还敬业了属于是[脱单doge][脱单doge] 感谢微软爹送的协程[嗑瓜子]
虚竹V:
哈哈 期待 原理和手撕携程,然后io_uring

孤光鸿影:
我看到printf,我还以为是C,我初学,看到的都是cout

【回复】回复 @Twilight-Dream :还需要线程间同步,格式化log什么的,最后重新发明了printf[脱单doge][脱单doge]
【回复】返璞归真[脱单doge],cout槽点太多了
【回复】回复 @等疾风 :gcc --std=c++20
HeroTch:
up主的vscode底栏是哪个插件提供图形化编译控制的

【回复】CMake Tools 插件配合 CMakeLists.txt

编程入门 C++ 高能公开课 C++协程 高性能 编程学习 网络编程 c++ 编程开发 协程

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