Flask接口签名sign原理与实例代码浅析
301
2023-01-28
node thread.sleep实现示例
最近在写一些奇怪的东西的时候,发现大佬们用go或者其他语言实现的并发任务用了thread.sleep让主进程暂停。
回头一想,妈个鸡我要复制粘贴到node一直循环不合适啊,我也需要暂停来着!
怎么办??
抓了脑袋一会去npm上找了下相关的包,发现有个叫thread-sleep的包,下载量还挺高。
抱着好奇心去看了下源码,又发现源码相当之骚气
'use strict';
var childProcess = require('child_process');
var nodeBin = process.argv[0];
module.exports = sleep;
function sleep(milliseconds) {
var start = Date.now();
if (milliseconds !== Math.floor(milliseconds)) {
throw new TypeError('sleep only accepts an integer number of milliseconds');
} else if (milliseconds < 0) {
throw new RangeError('sleep only accepts a positive number of milliseconds');
} else if (milliseconds !== (milliseconds | 0)) {
throw new RangeError('sleep duration out of range')
}
milliseconds = milliseconds | 0;
var shouldEnd = start + milliseconds;
try {
childProcess.execFileSync(nodeBin, [ '-e',
'setTimeout(function() {}, ' + shouldEnd + ' - Date.now());'
], {
timeout: milliseconds,
});
} catch (ex) {
if (ex.code !== 'ETIMEDOUT') {
throw ex;
}
}
var end = Date.now();
return end - start;
}
黑人问号???
这是什么奇怪的实现。
翻阅node文档发现
Synchronous Process Creation#
The child_process.spawnSync(),
child_process.execSync(), and child_process.execFileSync() methods are synchronous and WILL block the Node.js event loop,
pausing execution of any additional code until the spawned process exits.
Blocking calls like these are mostly useful for simplifying general-purpose scripting tasks and for simplifying the loading/processing of application configuration at startup.
???
以上三种同步方法会阻塞nodejs的事件循环,除非创建的子进程执行完了,才会继续执行下面的代码。
所以很多时候我们没办法解决现有问题的原因是对文档不熟么??
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~