为什么在线程之间共享静态变量会降低性能?

时间:2014-08-17 17:58:47

标签: java multithreading performance static static-members

我问过问题here,有人发表评论说我的问题是sharing a static variable

为什么会出现问题?

2 个答案:

答案 0 :(得分:2)

共享静态变量和单独应该对性能没有负面影响。全局数据很常见,所有程序都以JVM和OS结构开头。

可变共享数据是一个不同的故事,因为共享数据的突变可能导致性能问题(至少是缓存未命中)和正确性问题,这些问题很痛苦并且通常使用锁来解决,这可能导致其他性能的问题。

答案 1 :(得分:1)

wiki静态变量看起来像是程序的一个重要部分。不知道它发生了什么或者它是如何编码的,我猜它会锁定以保持一致的状态。如果你的大多数线程都花时间阻止等待获取对同一个对象的访问权限,那么这就解释了为什么你没有看到使用多个线程获得任何收益。

要使线程对程序的性能产生影响,它们必须合理地独立,而不是全部锁定同一个东西。他们必须做的锁定越多,你看到的收益就越少。因此,尽量分开工作,尽可能多地独立完成。例如,如果有可以独立收集的工作项,那么最好让多个线程找到工作项,然后将它们提供给一个专用线程可以用来从队列中提取工作项和队列的队列。他们到维基对象。