新闻详情

新闻详情

首页 / 资讯中心 / 详情

Wren CLI 的 Timer 模块:用 Timer.sleep 实现纤程级延时与异步调度

发布时间:2026/11/11 17:01:15来源:尧图网络
Wren CLI 的 Timer 模块:用 Timer.sleep 实现纤程级延时与异步调度
编程语言语言运行时编译器【免费下载链接】wrenThe Wren Programming Language. Wren is a small, fast, class-based concurrent scripting language.项目地址https://gitcode.com/gh_mirrors/wr/wren点击查看免费下载Wren 的timer模块为 CLI 环境提供了一种挂起当前纤程fiber的机制Timer.sleep(milliseconds)既可以当作简单的延时等待使用也可以与Scheduler类配合在休眠期间让 Wren 调度执行其他已排队的任务。读完本文你将掌握Timer.sleep的完整 API 语义、参数约束与运行时错误条件并学会用Timer.sleepScheduler.add编写基于纤程协作的异步脚本。timer 模块概览根据 CLI 模块索引Wren 的命令行可执行文件CLI在语言内置模块之外还自带一组面向脚本场景的模块提供 IO 等设施。timer就是其中之一其模块说明见 timer/index.markdown明确指出该模块提供一种机制将当前纤程挂起一段指定时间——既可以作为简单的延时也可以在此期间让其他操作异步执行。整个模块只包含一个类Timer。它没有构造函数、没有实例方法所有能力都通过一个静态方法sleep暴露属于典型的工具类设计。Timer.sleep 的 API 与语义签名与参数Timer.sleep(milliseconds)sleep是一个静态方法直接通过类名调用作用是将当前纤程挂起指定的毫秒数参数milliseconds表示休眠时长单位是毫秒调用会挂起当前正在执行的纤程而不是整个进程挂起期间Wren 虚拟机可以继续执行其他纤程的任务。这一点是理解Timer.sleep的关键Wren 的并发模型基于纤程fiberTimer.sleep并不阻塞整个程序而是只暂停当前纤程的执行流。参数约束与运行时错误官方文档timer.markdown明确规定了参数约束如果参数不是非负数non-negative number将产生运行时错误。也就是说milliseconds必须满足两个条件必须是数字number类型必须大于等于 0即不能为负数。例如以下调用都是合法的Timer.sleep(0) // 立即返回 Timer.sleep(100) // 挂起 100 毫秒 Timer.sleep(3000) // 挂起 3 秒而传入负数、字符串等非法参数都会在运行时抛出错误。文档并未给出具体错误消息文本仓库源码中也没有针对该 API 的专门测试用例当前仓库test/目录下未发现Timer.sleep相关测试因此以官方文档描述的运行时错误为准即可。挂起期间发生了什么纤程协作模型文档特别强调Timer.sleep挂起的是当前纤程而非整个程序。这在 Wren 中意味着当前纤程的后续代码暂时停止执行虚拟机的控制权让出其他可运行的纤程有机会继续执行休眠时间结束后当前纤程从挂起点恢复继续向下执行。这种让出式的协作调度使得Timer.sleep天然适合与 Scheduler 类 搭配使用。Scheduler 维护了一个纤程队列当收到信号时依次启动这些纤程而该信号通常正是由File、Timer这些类的长耗时方法发出的——它们挂起当前纤程让 Wren 在等待期间去做其他事情。实战Timer.sleep 与 Scheduler 协同编排任务Scheduler 类只提供一个静态方法Scheduler.add(callable)把一个新纤程加入调度队列该纤程会调用传入的callable一个函数或其他带call()方法的对象执行完毕后转移到队列中的下一个纤程。Scheduler 官方文档给出的完整示例正好演示了Timer.sleep的核心用法——在休眠期间执行已排队的任务var a 3 Scheduler.add { a a * a } Scheduler.add { a a 1 } System.print(a) // still 3 Timer.sleep(3000) // wait 3 seconds System.print(a) // now 3 * 3 1 10逐步解读这段脚本的执行过程主纤程开始时a 3通过Scheduler.add依次注册两个闭包任务先乘后加但此时它们尚未执行所以System.print(a)输出的仍是3调用Timer.sleep(3000)挂起主纤程 3 秒——关键就在这一步主纤程休眠期间Scheduler 收到信号依次启动队列中的两个纤程分别执行a a * a和a a 13 秒后主纤程恢复此时a已经是3 * 3 1 10第二次System.print(a)输出10。这个例子直观展示了 Wren CLI 中延时 异步任务编排的典型模式Timer.sleep不是简单地空等而是把时间让渡给 Scheduler 处理其他待办任务。注意事项sleep 会冻结 System.clock文档在 timer.markdown 中特别提示了一个容易被忽略的副作用注意该方法也会挂起System.clock因此程序无法据此获得正确的运行时间。这与 System 类文档 中System.clock的定义直接相关——它返回程序启动以来经过的秒数含小数部分通常用于基准测试benchmarking。当程序处于Timer.sleep休眠期间时System.clock同样处于挂起状态不会继续计时。实际影响是如果在一个包含Timer.sleep的程序里用System.clock测量耗时测量结果会偏小因为它没有计入休眠时间对包含休眠等待的脚本做基准测试时应改用不受挂起影响的计时方式或在测量区间内避免调用Timer.sleep。使用边界CLI 专属模块需要特别说明的是timer连同io、os、scheduler属于 Wren CLI 扩展模块而非语言内核。根据 CLI 模块索引 的说明CLI 模块与 libuv、彼此之间以及命令行应用的其他内部实现深度耦合难以单独拆分出来供希望嵌入 Wren 的主机应用使用。因此为 CLI 编写的脚本具有 CLI 特异性除非其他宿主实现了相同的 API。这意味着Timer.sleep只在 Wren 的命令行可执行文件中可用如果你的脚本依赖Timer或Scheduler它就无法直接移植到嵌入 Wren 的自定义宿主程序中想要在其他宿主里获得类似能力需要自行实现同一套 API。小结Timer.sleep(milliseconds)是timer模块唯一的 API负责把当前纤程挂起指定毫秒数参数必须是非负数字否则产生运行时错误它采用协作式调度休眠期间让出控制权配合Scheduler.add可在等待期间按队列执行其他纤程任务它会连带挂起System.clock涉及计时/基准测试时需避开休眠区间该模块是 CLI 专属扩展与 libuv 深度绑定不可用于嵌入式宿主场景。对并发脚本而言Timer.sleepScheduler.add组合是 Wren CLI 中最基础的异步编排工具一个负责让出执行权一个负责接管并推进待办任务二者配合即可在单线程的纤程模型上实现延时期间干别的事的异步效果。赞分享编程语言语言运行时编译器【免费下载链接】wrenThe Wren Programming Language. Wren is a small, fast, class-based concurrent scripting language.项目地址https://gitcode.com/gh_mirrors/wr/wren点击查看免费下载相关推荐JeecgBoot 微服务中 Nacos 服务注册与发现上手指南JeecgBoot 微服务中 Nacos 服务注册与发现上手指南 服务拆多了它们之间怎么互相找到 服务越拆越多一个问题就躲不开了前端发个请求怎么定位到编程语言语言运行时编译器Boogu-Image-0.1-Edit模型家族深度解析Base、Turbo、Edit三大变体对比Boogu Image 0.1 Edit模型家族深度解析Base、Turbo、Edit三大变体对比 Boogu Image 0.1是一个极具竞争力的Apach如何高效解决Instagram视频保存难题Next.js下载工具全攻略如何高效解决Instagram视频保存难题Next.js下载工具全攻略 在社交媒体内容创作与数字资源管理领域Instagram视频的高效保存一直是用户面临的编程语言语言运行时编译器上一篇批量替换100个元素只需1分钟Illustrator脚本ReplaceItems.jsx实战指南下一篇Grafana Tempo 指标生成器中的 Active Series活跃时间序列计算原理与降基数实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉