当前位置: 首页 > 知识库问答 >
问题:

多线程的CyclicBarrier性能较弱:树状同步结构会是一种替代方案吗?

饶德本
2023-03-14

我们的应用程序要求所有工作线程在一个定义的点进行同步。为此,我们使用cyclicbarrier,但它似乎不能很好地伸缩。对于超过8个线程,同步开销似乎超过了多线程的好处。(不过,我无法用测量数据来支持这一点。)

1
| \
2   3
|\  |\
4 5 6 7

另请参阅这个特色问题:Java中最快的循环同步是什么(ExecutorService vs.CyclicBarrier vs.X)?

共有1个答案

乐正远航
2023-03-14

您正在以一种微妙的错误的方式思考问题,这往往会导致非常糟糕的编码。您不希望等待线程,您希望等待工作完成。

最有效的方法可能是共享的、可等待的计数器。当你做新的工作时,增加计数器并给计数器发信号。完成工作后,递减计数器。如果没有活儿干,就在柜台上等。如果你把计数器降为零,检查你是否能做出新的工作。

 类似资料:
  • 本文向大家介绍java多线程CyclicBarrier的使用案例,让线程起步走,包括了java多线程CyclicBarrier的使用案例,让线程起步走的使用技巧和注意事项,需要的朋友参考一下 1、CyclicBarrier: 一个同步辅助类,用于协调多个子线程,让多个子线程在这个屏障前等待,直到所有子线程都到达了这个屏障时,再一起继续执行后面的动作。 2、使用场景举例: 年末公司组织团建,要求每一

  • 本文向大家介绍五种Java多线程同步的方法,包括了五种Java多线程同步的方法的使用技巧和注意事项,需要的朋友参考一下 为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举 个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同

  • 根据文件中的说明: setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。 对setState的调用不能保证同步操作,可能会为了提高性能而对调用进行批处理。 因此,由于是异步的,因此无法保证其同步性能。是否有同步的替代方法。 例如 因为值是以前的值,所以什么是替代方案,将给予使用。 Stackoverflow上有几个问题

  • 本文向大家介绍请你说一下C++多线程,线程同步的几种方式相关面试题,主要包含被问及请你说一下C++多线程,线程同步的几种方式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 概念:   进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;   线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最

  • 这是我第一次尝试无痛脚本,但是几乎每个示例都使用“state”对象,这在我的版本中不可用。 即 导致:变量[state]未定义。 省略它也没有帮助 结果为:“变量[id_map]未定义。”在map_script部分 早期版本的替代方法是什么?

  • 问题内容: 我经常遇到这样的情况:我要存储的信息比Redis任何简单数据结构所能容纳的信息都要复杂。我仍然想使用Redis,但是我想知道人们在理想情况下是否希望使用嵌套结构使用任何标准替代方案? 问题答案: 您基本上有两种策略: 您可以序列化复杂对象并将其存储为字符串。我们建议使用json或msgpack作为序列化格式。这很容易从大多数客户端语言进行操作。如果需要服务器端访问,则服务器端的Lua脚