IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:生成器

共 2 篇相关文章

IT 累计浏览 3,285

在PHP中使用协程实现多任务调度

这篇讲的是如何用 PHP 5.5 引入的生成器与协程特性,来实现协作式多任务调度。文章先从迭代生成器(如用 `xrange` 替代 `range` 避免大数组占内存)说起,阐明了生成器本质是一种“可中断的函数”,`yield` 既是中断点也是通信端口。 在此基础上,作者进一步解释了协程如何通过 `send()` 方法实现双向通信。但文章的真正重点是最终的多任务调度方案:作者定义了一个 `Task` 类来包装协程,通过一个 `beforeFirstYield` 标志位巧妙解决了首次调用时可能跳过第一个 `yield` 值的隐患。另一个 `Scheduler` 类则负责管理这些任务,用一个队列来调度它们的执行。 整个实现的巧妙之处在于,它将“协程主动让出控制权(通过 `yield`)”这一特性,转化为“任务协作”的核心机制,从而在单线程内模拟出并发运行多个任务的效果。文章最后点明,这种协作模式完全依赖任务自身的良好协作,这与操作系统中可能强制切换的抢占式多任务形成了鲜明对比。对于想在 PHP 中实现轻量级并发或理解协程底层思想的开发者,这是一个非常清晰且动手性很强的范例。

IT 累计浏览 1,270

JavaScript版本的AsyncEnumerator

这篇文章从C# 2.0中yield关键字和AsyncEnumerator的异步简化功能出发,探讨了异步编程模型的演变历程。作者为便于JavaScript开发者理解,亲自用JavaScript实现了一个AsyncEnumerator,展示了如何将C#中的迭代器概念移植到Web环境中。核心实现思路基于ES6的generator函数,通过yield来暂停和恢复执行,模拟异步操作的流程,同时结合Promise处理回调,使得异步代码更线性易读。JavaScript版本的巧妙之处在于,它保留了C# yield的简洁性,又适应了JavaScript的单线程事件循环,巧妙桥接了不同语言的异步模型。文章通过具体代码示例和实现细节,帮助读者直观看到如何用现代JavaScript特性优化异步处理,避免回调嵌套,为实际项目中的异步策略选择提供了实用参考。