614 讀數
614 讀數

异步运行时:困惑的开发人员的入门指南

经过 Oleg Efimov3m2024/04/04
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

本入门指南旨在阐明异步编程如何提升应用程序性能、可扩展性和响应能力。通过关注非阻塞操作和事件循环的通用原则,我们超越了 AsyncIO、Node.js 或 Go 等特定技术。
featured image - 异步运行时:困惑的开发人员的入门指南
Oleg Efimov HackerNoon profile picture

本入门指南专为好奇心强、专业水平高涨的开发人员而设计,旨在阐明异步编程如何提升应用程序性能、可扩展性和响应能力。通过关注非阻塞操作和事件循环的通用原则,我们超越了 AsyncIO、Node.js 或 Go 等特定技术。


此项探索专为那些渴望掌握推动现代软件发展的效率而又不想受到复杂技术术语影响的软件开发人员而设计。


想象一下,处理请求的单线程就像是繁忙城市中的一条单车道公路:每个请求都是一辆车,当只有一条车道时,汽车就会排队,造成延误。但如果我们的城市(我们的服务)能够更巧妙地管理交通,情况会怎样?这就是异步运行时的魔力所在。这就像为我们的城市添加一个智能交通系统,引导汽车通过多条车道和交叉路口而无需等待。


该系统可保持交通顺畅,确保没有车辆(或任务)等待太久,这正是异步运行时使我们的软件高效运行的方式。


让我们考虑一个同步完成 I/O 操作的服务示例。为清楚起见,这些操作在图中显示在主执行流程之外:

在服务启动阶段阻塞 I/O 可能是可以接受的,但在处理外部请求时建议避免这种方法。下图说明了如何通过采用非阻塞 I/O 操作来提高服务效率:

这些示例重点介绍了服务器性能增益最大化的场景。尽管如此,非阻塞操作的优势在任何频率的传入请求中仍然存在。即使在不太理想的条件下,将专用 I/O 线程集成到处理工作流中也可以提高性能。


只要有足够的线程来处理所有请求,处理一个请求所需的总时间(从客户端的初始请求到最终响应,如右侧蓝色数字所示)将始终减少。在最坏的情况下,这个持续时间不会超过同步处理方法的持续时间。

然后,我们遇到了一种对许多开发人员来说似乎违反直觉的做法。当 I/O 操作占请求处理时间的很大一部分时,优化其他代码段可能会带来轻微的改进。从缓存中获取数据的持续时间可能与专用于业务逻辑和模板渲染的时间紧密相关。


与其他处理活动相比,使用缓存或进程内数据库可以减少数据检索时间。


为了有效地分段代码并促进回调执行,可以指示运行时继续进行下一个事件循环周期。下面是如何应用此概念的说明性示例:

 // blocking callbacks function func1_cb(str, cb) { var res = func1(str); cb(res); } function func2_cb(str, cb) { var res = func2(str); cb(res); } // non-blocking callbacks function func1_cb(str, cb) { var res = func1(str); process.nextTick(function () { cb(res); }); } function func2_cb(str, cb) { var res = func2(str); process.nextTick(function () { cb(res); }); } // usage example func1_cb(content, function (str) { func2_cb(str, function (result) { // work with result }); });

通过采用这种方法拆分两部分计算,对于几乎并发的请求到达场景,整体处理时间保持不变。但是,对第一个请求的响应会延迟:

此场景代表采用“下一个滴答”策略时最不利的结果。如初始示例所示,“下一个滴答”方法对于不频繁的请求而言是无害的。如果请求以中等速度到达,则利用此技术可以通过允许在执行中断期间交错发起新请求和启动非阻塞操作来提高处理速度。这种方法有效地减少了总处理时间和每个请求的平均时间:

总之,采用非阻塞 I/O 对于提高应用程序性能至关重要,并且在传入请求量稀疏和繁重的环境中大有裨益。此外,有效地对执行流程进行排序(类似于“下一个滴答”技术的概念说明)可显著提高服务器效率。采用这些异步编程实践比传统的同步方法具有明显的优势。

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks