node thread.sleep实现示例

 更新时间:2018年06月20日 14:28:48   作者:有把但没什么卵用  
这篇文章主要介绍了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的事件循环,除非创建的子进程执行完了,才会继续执行下面的代码。

thread-sleep包的作者正是利用这一特性实现了sleep功能。叹为观止

所以很多时候我们没办法解决现有问题的原因是对文档不熟么??

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 关于node编写文件上传的接口的坑及解决

    关于node编写文件上传的接口的坑及解决

    这篇文章主要介绍了关于node编写文件上传的接口的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 整理 node-sass 安装失败的原因及解决办法(小结)

    整理 node-sass 安装失败的原因及解决办法(小结)

    这篇文章主要介绍了整理 node-sass 安装失败的原因及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • nodejs密码加密中生成随机数的实例代码

    nodejs密码加密中生成随机数的实例代码

    本篇文章主要介绍了nodejs密码加密中生成随机数的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解nodejs express下使用redis管理session

    详解nodejs express下使用redis管理session

    本篇文章主要介绍了详解nodejs express下使用redis管理session ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • node NPM库promise 异步任务状态管理

    node NPM库promise 异步任务状态管理

    这篇文章主要介绍了node NPM库promise 异步任务状态管理
    2023-07-07
  • 学习 NodeJS 第八天:Socket 通讯实例

    学习 NodeJS 第八天:Socket 通讯实例

    本篇文章主要介绍了学习 NodeJS 第八天:Socket 通讯实例,非常具有实用价值,需要的朋友可以参考下。
    2016-12-12
  • node gyp安装canvas原生模块编译node pregyp详解

    node gyp安装canvas原生模块编译node pregyp详解

    这篇文章主要为大家介绍了Nodejs关于原生模块编译node-gyp + node-pre-gyp (以安装canvas为例)示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • mac中利用NVM管理不同node版本的方法详解

    mac中利用NVM管理不同node版本的方法详解

    这篇文章主要给大家介绍了关于在mac中利用NVM管理不同node版本的相关资料,文中详细介绍了nvm的安装和卸载、nvm安装node的方法,以及nvm如何管理node版本,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • Node解决简单重复问题系列之Excel内容的获取

    Node解决简单重复问题系列之Excel内容的获取

    这篇文章主要给大家介绍了关于利用Node解决简单重复问题系列之Excel内容获取的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。
    2018-01-01
  • 在Node.js应用程序中处理大数的操作指南

    在Node.js应用程序中处理大数的操作指南

    在JavaScript生态系统中,你可以使用BigInt来处理大整数,但是,你也可以使用具有类似于BigInt功能的第三方库,本文将是使用BigInt和提供类似功能的流行库管理大数的完整指南,我们还将比较第三方库的用例、优势和劣势
    2023-06-06

最新评论