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当中的代码嗅探扩展原生对象和原型(prototype)
Jan 11 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
微信小程序实现换肤功能
Mar 14 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
Dec 19 Javascript
详解如何在Javascript中使用Object.freeze()
Oct 18 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
Jan 18 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 array_intersect()函数使用代码
2009/01/14 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
php数组编码转换示例详解
2014/03/11 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python入门之modf()方法的使用
2015/05/15 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Python sorted排序方法如何实现
2020/03/31 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
企业党员公开承诺书
2014/03/26 职场文书
创业计划书之家教中心
2019/09/25 职场文书
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python