首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BlockingQueue中的上下文切换开销

BlockingQueue中的上下文切换开销
EN

Stack Overflow用户
提问于 2015-11-20 04:18:13
回答 1查看 339关注 0票数 4

BlockingQueue中的同步是通过锁来实现的,而ConcurrentLinkedQueue使用的是涉及到CAS的无锁算法。但我的问题是关于上下文切换开销。如果有10个线程从BlockingQueue请求出列,那么一次只有一个线程将锁定队列,并放置9个上下文切换(9个线程将松散),而在ConcurrentLinkedQueue的情况下,没有上下文切换开销,但就时间切片而言,在时间切片结束后,所有10个线程都将一次又一次地切换上下文,与BlockingQueue相比,这不会导致更多的上下文切换开销吗?以下哪一项可减少上下文切换开销?

EN

回答 1

Stack Overflow用户

发布于 2016-02-02 02:00:01

ConcurrentLinkedQueue没有take(),所以我们不能对其进行比较。因此,您正在比较.poll()。我们可以讨论为什么不使用BQ.take(),以及BQ.put()执行signal()而不是signalAll()并且只唤醒一个线程,而不是10个线程,但这是另一个问题。

BQ锁是使用可重入锁实现的,它们本身使用CAS。

唯一的区别是这种锁定的“公平性”(参见reentrantlock的属性),以及可能的并发链接队列的更紧密的锁编码(堆栈深度较小)。

微基准测试,检查操作系统中的CTX开关数量,以及JVM分析器热点...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33813593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档