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 相关文章推荐
几个javascript操作word的参考代码
Oct 26 Javascript
javascript 学习笔记(八)javascript对象
Apr 12 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
js作用域及作用域链概念理解及使用
Apr 15 Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
详解JavaScript的BUG和错误
May 07 Javascript
微信小程序日历效果
Dec 29 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 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
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP生成便于打印的网页
2006/10/09 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python保存数据到本地文件的方法
2018/06/23 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
前台接待的工作职责
2013/11/21 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技