【发布时间】:2021-05-02 12:04:11
【问题描述】:
我正在阅读“Eloquent Javascript”,第 11 章异步编程,第 181 页给出了一张图表,对比了发送两个网络请求的情况下单线程、多线程和异步技术的差异。黑点代表时间线中提出请求的点。细线表示等待响应所花费的时间。粗线代表正常的程序执行。我的疑问是时间线上的差距。作者没有提到它们代表什么,所以我很难在概念上做出精确的区分。任何理解方面的帮助表示赞赏。
异步模型允许同时发生多件事。 当你开始一个动作时,你的程序会继续运行。当动作 完成后,程序会收到通知并可以访问结果(例如, 从磁盘读取的数据)。
我们可以使用一个小的比较同步和异步编程 示例:一个程序从网络中获取两个资源,然后 结合结果。
在同步环境中,请求函数仅在 它已经完成了它的工作,执行此任务的最简单方法是发出请求 一个接一个地。这样做的缺点是第二个请求将是 只有在第一个完成时才开始。花费的总时间至少为 两个响应时间的总和。
在同步系统中,这个问题的解决方案是启动额外的 控制线程。线程是另一个正在运行的程序,其执行可能 由操作系统与其他程序交错——由于大多数现代计算机包含多个处理器,因此多个线程甚至可以运行在 同时,在不同的处理器上。第二个线程可以启动第二个 请求,然后两个线程都等待它们的结果返回,之后 他们重新同步以组合他们的结果。
在下图中,粗线表示程序花费的时间 正常运行,细线表示等待网络所花费的时间 工作。在同步模型中,网络所花费的时间是 给定控制线程的时间线。在异步模型中,启动一个 网络动作在概念上会导致时间线的分裂。该程序 启动动作继续运行,动作发生在它旁边, 完成时通知程序。
【问题讨论】:
标签: javascript multithreading asynchronous asynchronous-javascript