本周, JSR 166 并发工具包的规范领导者——Doug Lea,就 JSR-166y 引入的新特性——Phasers 在 166y concurrency-interest 邮件列表上发贴推介。
之前受限于 ForkJoinTasks(在 forkjoin.TaskBarrier 类中) 的灵活的 Barrier 功能,现在被重写为 Phaser 类(放在 j.u.c 而不是 j.u.c.forkjoin 中),这样就可以应用到任何任务中去。
“Phaser"这个概念和名字是由 Rice 大学的一个团队在一份白皮书中创造出来的。这样命名的原因在于该构造的相位有序性和死锁预防属性。这份白皮书较为详尽地解释了phaser 的概念。同Java 目前已有特性相比,虽然Phaser 实现的功能与 CyclicBarrier 类 (Java5 中引入)类似,但是在灵活性上它要更胜一筹。 > [java.util.concurrent]CyclicBarrier 类支持线程集内周期性 Barrier 同步。然而它并不能像 Phasers 那样做到线程的动态添加和移除,以及单向同步和分相操作。
研究另外的 Barrier 实现的主要动机之一不仅仅是要增加灵活性,还要提高 Barrier 同步概念的性能和可伸缩性。 > Phasers 在三个不同的 SMP 系统上运行结果显示,除了普遍适用性和安全性带来的生产效率的提高外,其性能也明显优于现有的 Barrier 实现。
正如 Doug Lea 所说,JSR-166y 引入的 Phaser 由现有的 fork/join 框架改写而来。 InfoQ 此前的很多文章都提到过fork/join 框架,它是即将发布的166y JSR 的重要特性之一,Doug Lea 曾为其专门写过一份介绍用途和用法的白皮书 。前面提到的TaskBarrier 类被fork/join 框架用来管理不同任务的边界,并合并运行结果,换句话说就是连接任务。 在JSP-166y 上可以找到 Phaser 类的 Javadoc 草稿,Lea 在他发给邮件列表的邮件中强调现在的文档仍然出于草稿状态:
一如即往地欢迎提出意见和建议。在我们进一步研究如何使用它的过程中,API 也许会发生一些改变,我们希望在此过程中能发现更合适的方法名。
目前人们都期待着 JSR-166y 被纳入 Java 7,成为该平台的一部分。 查看英文原文: New Java Concurrency Feature: Phasers
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论