为何服务器QPS上不去?Java线程调优权威指南
示例代码先是计算数组中小于 0.5 的元素数。此外,如果代码中还计算了一个新的值,并保存到数组中了,会发生什么?一个没有实际意义但却是 CPU 密集型的实现可以执行以下代码: 因为用 j 索引的外部循环是基于元素在数组中的位置处理的,所以计算所需要的时间和元素位置成比例关系:计算 d[0] 的值需要很长的时间,而计算 d[d.length - 1] 则只需要很短的时间。 简单地将数组分为 4 段,用 ThreadPoolExecutor 处理,这个测试有一个不好的地方。计算数组第 1 段的线程需要很长的时间才能完成,比处理数组最后一段的第 4 个线程所需的时间长得多。一旦第 4 个线程结束,它就会处于空闲状态:所有线程都要等第 1 个线程完成它的耗时较长的任务。 在粒度为200万个任务的 ForkJoinPool 中,尽管有一个线程会忙于针对数组中的前 10 个元素的非常耗时的计算,但是其余线程都有工作可做,在大部分测试过程中,CPU 会保持忙碌。区别如表5 所示。 表5:处理包含10 000个元素的数组的时间 (编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |