Tag: 阻塞

Java BlockingQueue take()vs poll()

在无限循环中使用队列中的值时 – 更有效: 1)阻止队列,直到通过take()获得值 while (value = queue.take()) { doSomething(value); } 2)睡眠n毫秒并检查物品是否可用 while (true) { if ((value = queue.poll()) != null) { doSomething(value); } Thread.sleep(1000); }

垃圾收集和线程

AFAIK当GC正在执行其操作时,VM会阻止所有正在运行的线程 – 或者至少在压缩堆时。 这是CLR和JVM (生产版本截至2010年1月)的现代实现中的情况吗? 请不要提供有关GC的基本链接,因为我了解基本的工作原理。 我假设全局锁定就是这种情况,因为当压缩发生时,引用在移动期间可能是无效的,并且最简单的方法就是锁定整个堆(即,通过阻塞所有线程来间接锁定)。 我可以想象更强大的机制,但KISS经常占上风。 如果我不正确,我的问题将通过对用于最小化阻塞的策略的简单解释来回答。 如果我的假设是正确的,请提供以下两个问题的一些见解: 如果这确实是这种行为,那么像JBOSS和Glassfish这样的重量级企业引擎如何保持一致的高TPS率? 我在JBOSS上做了一些谷歌搜索,我期待在APACHE上找到适合网络处理的内存分配器。 面对NUMA式架构(可能在不久的将来),这听起来像是一场灾难,除非进程受到线程和内存分配的CPU限制。