Nodejs 能否实现子进程休眠
Nodejs 能否实现子进程休眠
Unix 下发送 SIGSTOP 信号即可暂停进程
linux 下不了解,但 windows 下可以冻结(挂起)进程和进程组,类似 nginx 这样 fork 出来的进程都是没问题的,文档 MSDN 上有,但是有没有 nodejs 的包装就不知道了
我在 ubuntu 上试了一下 node.js 调用 process.kill(pid, “SIGSTOP”) 和 系统的 kill -STOP pid 虽然都可以暂停进程,但似乎并没有减少资源占用。重点是想减少资源,不然暂不暂停的作用不太明显 😂
ok 我再看看
const nil = new Int32Array(new SharedArrayBuffer(4));
const array = new Array(100000).fill(0);
setInterval(() => {
console.log(1);
}, 1e3);
Atomics.wait(nil, 0, 0, Number(600e3));
Atomics.wait 方法,该方法会监听一个 Int32Array 对象的给定下标下的值,若值未发生改变,则一直等待(阻塞 event loop),直到发生超时(由 ms 参数决定定):
与 fork(2) POSIX 系统调用不同,child_process.fork() 不克隆当前进程。所以“使用 fork 方式”和使用 child_process.spawn 、child_process.exec 有什么区别?
你要减少什么资源占用?减少内存一般是不可能的。
好吧,看来只能做 cpu 占用方面的优化了
被动调度由操作系统来完成,操作系统是不会完全按照应用开发者的想法来管理资源的,所以有需求的话最好主动实现。
可以从业务逻辑上来实现将状态保存到硬盘上,然后退出进程,以及启动恢复进程的时候从硬盘中读取状态继续执行。
👍很好的思路
当然可以,Node.js 可以通过创建子进程并使其休眠来实现这一功能。Node.js 提供了 child_process
模块来创建和管理子进程。在子进程中,你可以使用操作系统的命令来实现休眠功能,例如在 Unix 系统上使用 sleep
命令。
下面是一个简单的示例,展示如何在 Node.js 中创建一个子进程并使其休眠 5 秒:
const { exec } = require('child_process');
// 创建一个子进程执行 sleep 命令,休眠 5 秒
exec('sleep 5', (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
stdout ? console.log(`stdout: ${stdout}`) : console.log('无标准输出');
stderr ? console.error(`stderr: ${stderr}`) : console.log('无错误输出');
console.log('子进程休眠 5 秒后结束');
});
console.log('主进程继续执行');
在上面的代码中,exec
函数用于执行系统命令 sleep 5
,这将导致子进程休眠 5 秒。同时,主进程会继续执行,不会等待子进程完成。5 秒后,子进程结束,回调函数被调用,打印出相应的信息。
请注意,sleep
命令在不同的操作系统上可能有所不同。例如,在 Windows 上,你可以使用 timeout
命令代替 sleep
,例如 exec('timeout /t 5', callback)
。
这个示例展示了如何通过 Node.js 实现子进程休眠,同时说明了主进程和子进程的执行是异步的。