最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在主线程中执行的异步任务

运维笔记admin11浏览0评论

在主线程中执行的异步任务

在主线程中执行的异步任务

JavaScript是一种单线程编程语言(可以同时执行一项任务)

因此,它首先运行主线程(同步),然后在事件循环中执行异步任务(这是我的理解,但显然我错了)

Node.js使用libuv一个处理异步任务的库

// synchronously open file descriptor
var fd = fs.openSync('testFile', 'r+'); 

// synchronously write data to the file
fs.writeSync(fd, ' first data part '); 

// asynchronously write data to the file
fs.write(fd, ' second data part ', function(err){ 
    if(err) console.log( err );
});

// asynchronously close the file descriptor 
fs.closeSync(fd);

异步写入方法已成功将数据写入文件,但并非总是如此! (方法抛出“错误的文件描述符”错误)

我预计异步'write()'方法会导致错误,因为文件描述符是同步关闭的,因此它不应该具有有效的文件描述符(但并非总是如此)

这里是问题

  • 这是否意味着异步任务由libuv运行单独的JS线程单独执行,因此导致上述示例不会崩溃?

  • 如果我在上面,这在浏览器中是否是相同的行为(浏览器之间是否存在异步差异?

  • 如果我错了,上述异步'write()'方法如何获取文件描述符?

回答如下:

JavaScript是单线程的。 JS的并发样式就是所谓的非阻塞。该代码是在事件循环的一个线程上执行的,因此您无法阻止它或一切都停止(这就是警报阻止您与页面进行交互的原因)。但是,在幕后,浏览器具有用于处理AJAX请求,渲染,事件触发器和文件操作。当他们捕获任何新事件时,会将其推送到事件队列中,然后触发该事件循环,在该循环中您的代码正在运行,并且该循环处理请求。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论