Node.js v16.7.0如何使用第二线程运行定时日期比对函数
解决方案
Node.js v16.7.0 已稳定支持 worker_threads 多线程模块,你可以通过工作线程运行周期性比对逻辑,完全不阻塞主线程的事件监听任务。
实现步骤
1. 主线程代码(存放原有事件监听逻辑)
const { Worker } = require('worker_threads'); // 启动独立的工作线程运行日期比对逻辑 const compareWorker = new Worker('./date-compare-task.js'); // 可通过postMessage向工作线程动态传递比对参数,示例: // compareWorker.postMessage({ targetDate: new Date('2024-12-31') }) // 下方直接写你原有的其他事件监听代码即可,不会被比对逻辑阻塞
2. 工作线程代码(date-compare-task.js)
const { parentPort } = require('worker_threads'); // 你的原有比对函数 function dateCompare(d1, d2){ if(d1 <= d2){ // 此处为JSON配置编辑逻辑,已实现无需处理 } } // 每100ms执行一次比对 setInterval(() => { // 如果需要使用主线程传递的参数,可通过message事件接收: // parentPort.on('message', (params) => { /* 调用dateCompare */ }) // 示例为固定参数,可按实际需求调整 const currentDate = new Date(); const targetDate = new Date('2024-12-31'); dateCompare(currentDate, targetDate); }, 100);
注意事项
- 主线程和工作线程通过
postMessage传递数据,数据会自动做结构化克隆,不会出现多线程内存共享冲突 - 如果JSON配置编辑逻辑涉及公共文件写入,建议加文件锁,避免主线程和工作线程同时写文件出现内容异常
- 工作线程无法直接访问主线程的变量和方法,所有跨线程交互都通过消息事件完成
内容的提问来源于stack exchange,提问作者Mikachu
相关产品推荐
相关产品推荐

