thevita 最近的时间轴更新
thevita
ONLINE

thevita

V2EX 第 163112 号会员,加入于 2016-03-13 15:36:28 +08:00
今日活跃度排名 4892
thevita 最近回复了
2 天前
回复了 sgld 创建的主题 Python 关于 Python 协程的 event loop 与 future
分享一下我的看法,我理解这些概念不太喜欢先深入细节,有全局视角再看细节

无栈协程的核心就是 把顺序代码变成一种状态机,不同语言的实现差异很大,但逻辑差不多

(其实我们如果不用 coroutine, 写事件驱动应用 就是手写这个状态机)

await 就是状态转移点,从一个 await 完成 到下一个代码路径上的 await 就是一次状态转移

将这一小段代码封装起来 就叫 task, 这就是 事件循环执行的基本单元(不同语言实现也不一样,python 应该是依靠 生成器状态机来实现,rust ,c++ 则靠编译器)

future/awaitable 作用是管理 task 之间的依赖关系,在某个 task 的 future done 的时候,将依赖它的 task 放进就绪队列等待执行(不同实现也不一样,比如 直接通过 callback )

所以:


- 啥时候让出权限: 一个 task 完成的时候
- 啥时候任务加进事件循环: 这个任务的依赖 future done 的时候 (实现可以都不一样,单实践效果一定是这样的)
- 啥时候恢复执行: 进如 ready 队列了,就等待执行了,自于啥时候执行,就是 队列和 调度器的实现了,也都不一样

----


正好前段时间看了 foundationdb ,他们自己实现了一个 叫 flow 的语言,在 < c++20 上实现了无栈协程,它的编译器会把 flow 的代码编译成 C++ 的状态机,可以清晰的看到怎么把代码转成状态机
touch bar 对我很鸡肋,我无法适应需要我需要目光下移去看一个和屏幕不在一个平面上的东西,即便只要瞟一眼,割裂感也很严重
其实 更大可能是 reuse 了
“复杂性” 从来不来自技术本身,而是来自于“业务”,或者说我们的数字系统的建模对象

而发明眼花缭乱的技术、思想,什么 react programming/DDD/各种 design pattern ,不过是为了控制复杂度的实践而已

不要搞反了关系,如果你预期到你的建模目标的复杂度不值得你专门去搞一个新“技术”/“框架”,那你就不用嘛
36 天前
回复了 lzyong2019 创建的主题 JavaScript 求前端高频数据绘图库
用 C++ 写, 使用 imGUI 这样的 Immediate Mode 方式绘制, 然后编译到 wasm/webgl
@thevita 现在还多一种,有时一些突然的观点,也发给 ChatGPT/DeepSeek ,当作思维发散器用
有一种磕巴是,想得太多,俗称脑子比嘴快,尝试文字输出行不行,如果文字没问题(即便慢点),那就是这种。

那就看说话的目的了,a) 即兴演讲、公开讲话,这时不犯错比说得出彩重要,讲得多就整理出来了一套自己的话语,用的时候,适当组合下,就尽量不输出即时的观点,b) 讨论、辩论、会议,慢一点,思考一下没什么不好,只要不是吵架。

总的来说,还是要多输出,通过输出来驱动对信息的整理、压缩。

我现在没时间(其实是懒),就直接写到 notes 里面,想到就记忆段,有时候看到就整理下
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4828 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 03:47 · PVG 11:47 · LAX 20:47 · JFK 23:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.