博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node thread.sleep实现
阅读量:6256 次
发布时间:2019-06-22

本文共 1626 字,大约阅读时间需要 5 分钟。

最近在写一些奇怪的东西的时候,发现大佬们用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功能。叹为观止

图片描述

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

转载地址:http://mmnsa.baihongyu.com/

你可能感兴趣的文章
【POJ】第一章 C/C++语言概述
查看>>
如何封装自己的js类库
查看>>
项目管理小小知识点总结
查看>>
ASP.NET之Javascript脚本的应用
查看>>
vlan间的互通
查看>>
ldconfig详解
查看>>
VBScript 页面的简单样例
查看>>
用c语言指针实现给整形数组冒泡排序
查看>>
ORA-01075,ORA-09925 Read-only file system问题一例
查看>>
Script:收集介质恢复诊断信息
查看>>
SocketIO 随笔
查看>>
Maven学习三之新建maven项目
查看>>
HTML5本地存储-localStorage如何实现定时存储
查看>>
LAMP之Centos6.5安装配置Apache(二)
查看>>
Tomcat集群
查看>>
shell脚本中输出带颜色字体实例分享及chrony时间同步
查看>>
简单计时
查看>>
面试心得
查看>>
linux系统时间同步,硬件时钟和系统时间同步,时区的设置
查看>>
CentOS下载包格式说明
查看>>