Question: 如何在浏览器环境 实现 sleep 函数, 可以给出 异步函数, 同步函数 两种实现方案吗?
Question: 当我执行 同步 sleep 函数,比如 sleepBySync(9e9), 这个时候浏览器 tab 会怎样?
B: hahah 随意啦 也可以 9_000_000_000
B: 那假设是在 react支持 concurrent 版本中, 一个事件 里面调用 sleepBySync(9e9), 那页面还会卡死吗
其实 promise 最有趣的 resolve, reject 这两个函数了, 我一直把他们理解为 异步环境下的 "PV"原语
可以 把resolve, reject 传到其他异步场景中, 再调用..
就好比 手动 join 下其他线程, 或者 发出个信号 这样
B: 我根据刚刚的讨论 以及我对 promise 的理解, 写了个限制网络请求数量的demo
超过限制的request, 会将 resolve 传到了 全局, 等到 resolve 被消费 才会执行(await), 已经完成的 网络请求 会按照顺序消耗 resolve 信号.
B: 现在 并发方案 业界, 学术界有挺多不同的模式了..
就比如 上午我说 ruby3 引进的 actor-model, 还有 golang 的 csp, 以及函数式宗教信奉的通过编程范式 去天然引进并发..
CSP 模型 和 Actor 模型, 具有相同的设计理念: 通过通信来实现共享内存,而不是用共享内存来实现通信。
然而它们的侧重点不同,Actor 关心通信的实体(对 OOP 更加友好),CSP关心通信的工具。 如果要选其一的话,我更加欣赏 CSP模型。
假设通信的数据,可以自我实现状态管理,这样一来就不会被通信双方所约束,消息传递的过程 就可以增加更多的抽象。 目前,业界的 CSP 代表 Golang 结合 Context 包已经实现了这一点。
C: 但是像JS这样的单线程语言,感觉玩不出多少花样来
B: 对啊.. 撑死就是借用下 异步 api, 去模拟下 fiber 了...