- 主题:stackoverflow 有个比较 c++ stackful 和 stackless 协程的帖子
我不知道啊。。怎么会有那么多玄学呢?按说协程是很简单的东东。在 20 年前的 python 和 golang 里面都是基本的语言结构了。新的 c++20 只提供了最基本的 stackless coroutine 语法,想要实现 python, golang 的协程还要加上一个标准库才显得复杂吧。
我说的这种 mmap() 一般是 c++ stackful coroutine 的实现方式,很凑巧地刚好匹配 c++ 资源管理。python 倒是不需要,而且也做不了资源管理。
【 在 ziqin 的大作中提到: 】
: 如果是真的这么轻量级,前面这么多关于协程stack的玄学部分又怎么解释。。。
: 事。
--
FROM 110.81.0.*
太有用了啊。比如 python 的 os.walk() 就是典型的应用。用迭代器以后,不再需要把整个 list/map 传递给上层调用者,经常能够省掉大量内存。
再来一个编译原理的应用,解析 token:
https://github.com/hgoldfish/gsion_script/blob/master/gsion#L78
顺便说一下,这个也是协程 coroutine 哦。很多人把 coroutine 和 fiber, green thread 等价,但其实 coroutine 是更宽泛的概念。
【 在 ylh0315 的大作中提到: 】
: 确实不知道这玩意儿有啥用。
--
修改:hgoldfish FROM 47.243.39.*
FROM 47.243.39.*
最后一个很容易。各个语言都会提供一个 when(), all(), map() 之类的函数。使用方式大概是这样:
async function pow2(i) {
resp = await http.post(url, {"i": i});
return resp.json()["result"];
}
let to_process = [...Array(10).keys()]
let results = Coroutine.map(pow2, to_process);
console.debug(results);
这里就会打印出使用 http 接口获得的平方序列。
【 在 wallyz 的大作中提到: 】
: 我的朴素理解:
: 协程就是内嵌数据、自带可更新的状态、可根据当前状态和数据恢复/继续执行的一个东西
: 至于是用栈,还是用另外的某种数据结构(比如一个很另类的类)来实现这个东西,理论上都是可以的
: ...................
--
FROM 110.81.0.*
各个语言的协程都会有一个类型来处理,比如 python 就直接叫 coroutine 类型,里面有:
send()/throw() 对应 javascript new Promise() 回调的 resolve()/reject()
【 在 gfkid 的大作中提到: 】
: 忽然想到了Promise
: 有种说法js中每个async返回的是一个promise
: rust是每个async返回future
: ...................
--
FROM 183.253.146.*
迭代器或者 stackless 协程,内部都会生成一个 context,这个不算闭包吧?
【 在 gfkid 的大作中提到: 】
: generator和closure很像啊
: 或者说迭代器是闭包的一个典型用法吧
--
FROM 183.253.146.*