2024年初,某电商平台在大促期间遇到性能事故,Java服务在并发连接数超过2万时响应延迟显著增加。问题源于线程模型不当,导致内存耗尽和频繁的上下文切换。文章探讨了不同线程模型(如每请求一线程、Reactor、Proactor、协程)的性能边界及其对架构决策的影响,强调选择合适模型以应对高并发场景的重要性。
作者在使用tonic grpc框架时发现性能不足,主要瓶颈在于tokio运行时和http2协议解析。为此,他开发了一个基于线程模型的grpc框架,性能比tonic快10倍,期待反馈和建议。
线程模型经历了从单线程到多线程和并行执行的演变。尽管多线程在高性能应用中至关重要,单线程架构因其简单性和维护性在现代分布式系统中仍然重要。混合模型结合了单线程和工作线程,以优化性能。
PostgreSQL的扩展性受限于基于进程的模型,开发人员考虑迁移到线程模型以提升共享状态和降低成本,但面临全局变量处理和性能损失的挑战。讨论结果显示大多数开发人员认为这种变化是好的,但目前没有人愿意投入时间来推动这一努力,因此在可预见的未来内不会转向线程模型。
从1996年1月的JDK1.0版本开始,Java就建立了基本的线程模型,JDK5.0引入了Java内存模型和并发包,JDK6.0优化了synchronized,JDK7.0推出了Fork/Join框架,JDK8.0推出了CompletableFuture和Stream,JDK9.0改善了锁争用机制,JDK10推出了线程-局部管控,JDK15禁用和废弃偏向锁,JDK19支持虚拟线程,J.U.C提供了原子化对象、锁及工具套装、线程池、线程安全容器等,使Java的自动档时代到来,大大降低了程序员使用多线程的门槛。
完成下面两步后,将自动完成登录并继续当前操作。