1
ysc3839 2021-12-20 13:04:05 +08:00 via Android
Unix 下发送 SIGSTOP 信号即可暂停进程
|
2
ragnaroks 2021-12-20 13:04:45 +08:00
linux 下不了解,但 windows 下可以冻结(挂起)进程和进程组,类似 nginx 这样 fork 出来的进程都是没问题的,文档 MSDN 上有,但是有没有 nodejs 的包装就不知道了
|
3
nojsja OP @ysc3839 我在 ubuntu 上试了一下 node.js 调用 process.kill(pid, "SIGSTOP") 和 系统的 kill -STOP pid 虽然都可以暂停进程,但似乎并没有减少资源占用。重点是想减少资源,不然暂不暂停的作用不太明显 😂
|
5
nojsja OP 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)); |
6
nojsja OP Atomics.wait 方法,该方法会监听一个 Int32Array 对象的给定下标下的值,若值未发生改变,则一直等待(阻塞 event loop),直到发生超时(由 ms 参数决定定):
|
7
nojsja OP 上面这种方式官方说可以停止事件轮询,让进程睡眠,不过具体是什么表现还需测试
|
8
Kasumi20 2021-12-20 15:15:08 +08:00
与 fork(2) POSIX 系统调用不同,child_process.fork() 不克隆当前进程。所以“使用 fork 方式”和使用 child_process.spawn 、child_process.exec 有什么区别?
|
11
libook 2021-12-20 17:10:25 +08:00 3
被动调度由操作系统来完成,操作系统是不会完全按照应用开发者的想法来管理资源的,所以有需求的话最好主动实现。
可以从业务逻辑上来实现将状态保存到硬盘上,然后退出进程,以及启动恢复进程的时候从硬盘中读取状态继续执行。 |