IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:事件循环

共 3 篇相关文章

IT 累计浏览 4,047

Redis的事件循环与定时器模型

这篇讲的是Redis单进程单线程模型背后的深层设计考量。作者从翻阅Redis源码出发,注意到一个“诧异”之处:这款高性能KV数据库并未采用常见的并发模型(如多进程/多线程),而是选择了看似“低效”的单线程架构。 文章的核心在于剖析这一设计选择的巧妙之处。作者推断,Redis的业务场景(快速内存操作、复杂数据结构)使得程序的可并行化程度并不高,顺序计算反而更优。单线程模型不仅省去了多线程同步、锁竞争以及维护线程池的开销,还简化了实现,这恰恰是Redis能够实现极高吞吐量与极低延迟的关键。这种对性能瓶颈的精准判断和取舍,值得后端开发者深入思考。 摘要自然收束,点明了文章对理解高性能服务设计的启发价值。

IT 累计浏览 6,259

Nginx源码分析-事件循环

这篇文章深入剖析了Nginx高性能网络模型的核心——事件循环(worker cycle)。作者将目光聚焦于worker进程陷入的“死循环”中,专门拆解其负责事件处理的关键函数`ngx_process_events_and_timers`。 核心思路在于协调与优化。文章详细解读了函数如何先通过`accept_mutex`互斥体来解决多进程监听同一端口的“惊群”问题,并巧妙利用`ngx_accept_disabled`变量实现简单的连接负载均衡。获取锁的进程不会立即处理事件,而是通过`NGX_POST_EVENTS`标志将事件暂存到队列,以尽快释放锁,避免长时间占用。 函数主体随后调用`ngx_process_events`(对应epoll等I/O多路复用模块)等待事件发生。处理过程分为两步:先处理暂存的`accept`事件(即新连接),完成后再处理普通读写事件队列。同时,如果等待耗时,还会检查并触发已超时的定时器。 最巧妙的设计在于整个流程的“锁-事件-处理”分离:通过精巧的锁和队列状态管理,在保证单进程处理新连接的稳定性前提下,实现了高效的多进程并发处理,这正是Nginx高并发能力的基石之一。

IT 累计浏览 3,287

JavaScript程序执行顺序问题总结

在JavaScript开发中,程序的执行顺序常常是初学者感到困惑、甚至资深开发者也会踩坑的关键点。这篇总结就聚焦于这个问题,作者从实际学习和开发中遇到的疑惑出发,系统地梳理了JavaScript代码背后的执行机制。 文章对比了同步代码的逐行执行、异步回调(如setTimeout)的调度,以及Promise和async/await所引入的微任务与宏任务队列。它清晰地解释了这些不同“任务”在事件循环中的关键差异:微任务(如Promise回调)通常优先于宏任务(如setTimeout回调)执行,而它们又都必须等待当前同步代码块执行完毕。理解这些,才能明白为什么即使写在后面的微任务,也可能先于前面的宏任务运行。 作者希望通过这样的梳理“挖坑填土”,不仅解决具体的执行顺序问题,更旨在抛砖引玉,与读者共同探讨JavaScript异步编程模型的核心思想。对于那些试图理清代码执行脉络、写出更可预测异步逻辑的开发者来说,这些扎实的基础总结提供了一个清晰的思考框架。