愿所有的美好和期待都能如约而至

异步实际上是如何在幕后工作的?

发布时间:  来源:互联网  作者:匿名  标签:asynchronous error how does asynchronous actually work under the hood..? excepti  热度:37.5℃

本文介绍了异步实际上是如何在幕后工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在研究多线程、回调、调度队列,以同步和异步的方式…
我研究得越多,我就越困惑和沮丧到了我似乎永远无法理解的地步。请有人能把我引向正确的方向开始吧。到目前为止,我发现的大多数信息都是关于IS的功能和优势。我真正想知道的是,当使用回调和单线程进行异步操作时,函数如何立即返回
[这里]的(http://nathansjslessons.appspot.com/lesson?id=1085)我从哪里得到这个信息

The function **returns immediately** before the file is read and schedules the read to happen       
sometime in the future. Once the data is ready, the callback function is called on the    
data.

以下是如何使用常规阻塞读取函数获取文件内容的示例
Var读取文件=Function(){

var data;
data = read('file.txt');
dosomething('contect' + data);
}

下面是使用异步ReadAsync函数的相同示例。

var readFileAsynch = function () {
     var func = function (x) {
          // i can do something with data
         dosomthing('content'+data);
     }
     **readAsynch('file.txt',func);** 
      dosomemorestuff();
     };

据我所知,如果您使用的不是我认为的主线程,而是另一个线程,这就是执行异步的方式,如果您只有一个线程,那么异步是如何真正工作的?

而且,当涉及到目标c中的调度队列时,是否可以认为队列只是指向块或函数的指针数组,并且线程负责在应用程序中管理该队列?

我真的很抱歉我的问题很模糊,但我也是。
希望任何人谁可以提供一些源代码或实现,我可以阅读,以了解真正发生了什么。我厌倦了只读一些东西,比如”使用线程是非常昂贵的”……但以什么方式..?或者,我不需要知道它..?

EDIT:那么ReadAsynch(‘file.txt’,func);如何与其他函数不同,从而将其称为Asynch..?为什么它可以在不等待上方的readAsynch函数的情况下立即执行doomemoreff,除非(我认为)当您调用readAsynch时,它是由另一个线程完成的。?

推荐答案

这完全取决于实现我的朋友,如果每个浏览器遵循语言规范,它们可以在幕后做任何他们想做的事情。

您不必担心线程之类的事情,但如果您担心,请记住这一点:

JavaScript不是一种”线程化”语言,它使用事件循环流,在该循环流中,触发一个事件,然后触发连续的函数,直到没有其他可调用的函数为止。这就是为什么在编写”好”的代码时,很难用JavaScript阻止用户界面的原因。

可以同时调用多个函数,而不会阻塞,这就是它的优点。函数的每次执行都有其自己的生存期,如果同时激发3个事件处理程序,则这3个事件处理程序将同时运行,而不是线性执行。

node.js是一个很好的例子,说明了它是如何工作的,以及事件循环和经典线程之间的区别,我给你一个例子:

假设您正在服务器上侦听请求,在请求到达2秒后,您将发送一条消息。现在让我们假设您复制该侦听器,并且两个侦听器执行相同的操作。如果您请求服务器,您将在请求发出后2秒同时收到这两条消息,而不是在2秒内收到一条消息,在4秒内收到另一条消息。这意味着两个监听程序同时运行,而不是像大多数系统那样遵循线性执行。

异步意味着:您告诉某个服务(DOM、服务器等)来执行操作,并附加一个事件处理程序,一旦服务告诉您,我已经得到您想要的东西,或者我已经完成了您需要的东西,就会执行该事件处理程序。并且该处理程序在执行任何其他鼠标点击或按键时被执行。事件处理程序的链接可能会很痛苦,但我相信这比阻止UI要好得多。

我希望您觉得这很有用,而不是更令人困惑。

这篇关于异步实际上是如何在幕后工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,

勇敢去编程!

勇敢的热爱编程,未来的你一定会大放异彩,未来的生活一定会因编程更好!

TOP