摘要:
性能是一个不断变化的指标,如果在昨天的测试基准中发现X比Y更快,那么在今天就可能已经过时了。在激烈竞争的情况下,在非公平锁的性能高于公平锁的性能的一个原因是:在恢复一个被挂起的线程与该线程真正开始运行之间存在着严重的延迟。假设线程A持有一个锁,并且线程B请求这个锁。由于这个锁已被线程A持有,因此B将... 阅读全文
摘要:
测试结果表明,LinkedBlockingQueue的可伸缩性要高于ArrayBlockingQueue。初看起来,这个结果有些奇怪:链表队列在每次插入元素时,都必须分配一个链表节点对象,这似乎比基于数组的队列执行了更多的工作。然而,虽然它拥有更好的内存分配与GC等开销,但与基于数组的队列相比,链表... 阅读全文
摘要:
要想通过并发来获得更好的性能,需要努力做好两件事情:更有效的利用现有处理资源以及在出现新的处理资源时使程序尽可能地利用这些新资源。第6章介绍了如何识别任务的逻辑边界并将应用程序分解为多个子任务。然而要预测应用程序在某个多处理器系统中将实现多大的加速比,还需要找出任务中的串行部分。单个任务的处理时间不... 阅读全文
摘要:
如果每个需要锁L和锁M的线程都以相同的顺序来获取L和M,那么就不会发生死锁了。解决这个问题,必须定义锁的顺序,并在整个应用程序中都按照这个顺序来获取锁。在制定锁的顺序时,可以使用System.identityHashCode方法,该方法将返回由Object.hashCode返回的值。 priv... 阅读全文