node thread.sleep实现示例


Posted in Javascript onJune 20, 2018

最近在写一些奇怪的东西的时候,发现大佬们用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 thread.sleep实现示例

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

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

Javascript 相关文章推荐
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
AngularJS 让人爱不释手的八种功能
Mar 23 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
微信小程序实现简单input正则表达式验证功能示例
Nov 30 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 #Javascript
Vue.use源码学习小结
Jun 20 #Javascript
Vuex入门到上手教程
Jun 20 #Javascript
JavaScript 中的 this 工作原理
Jun 20 #Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 #Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 #Javascript
vue打包的时候自动将px转成rem的操作方法
Jun 20 #Javascript
You might like
PHP数据缓存技术
2007/02/14 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
PHP 文件上传限制问题
2019/09/01 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
摘自启点的main.js
2008/04/20 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
应届中专生自荐书范文
2014/02/13 职场文书
销售经理工作检讨书
2015/02/19 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers