如果多个线程使用同一个对象,性能会受到影响吗? [关闭]

Posted

技术标签:

【中文标题】如果多个线程使用同一个对象,性能会受到影响吗? [关闭]【英文标题】:Is performance affected if multiple threads use the same object? [closed] 【发布时间】:2012-11-20 12:26:21 【问题描述】:

本例中的对象是带有一些搜索方法的字典。仅读取操作。

【问题讨论】:

显而易见的问题:您的对象在没有锁的情况下是多线程读取安全的吗?尽管线程并发,但该问题的答案和您的问题可能是相同的。 简介看看!取决于您的“字典”的实现,但是一个没有特别考虑多线程访问的普通字典不会带来任何重大开销。不过要注意特殊的同步集合;它们可能包括一些锁定/释放/等待开销。 @WhozCraig:对于仅读取操作,大多数类型都是线程安全的(不能保证,但这似乎成立:) @DavidRodríguez-dribeas 所有标准库容器对此是安全的,例如,只要保证不仅您正在阅读,而且没有其他人是 写作。当错误的项目不需要锁定时,通常不考虑容器是否可以写入到读取上下文之外的细节。对于这样一个微妙的例子,see this post 这不可能像其他“XYZ 是快还是慢”问题一样回答。对其进行分析并找出答案。如果您向我们提供了一些详细信息,我们可以给您一个猜测,但现在您什么也没给我们。 【参考方案1】:

快速回答:没有。

恰恰相反,它会加速你的程序,尤其是当你有一个需要将大量数据加载到内存中的对象时。

只要确保线程运行时没有任何东西可以写入对象。

【讨论】:

快速但不一定准确。如果他的字典在内部使用链式哈希并重新排序自身以将常用词保留在链的开头,或者如果它有一个自动调整的缓存怎么办?虽然 OP 确实说“仅读取操作”,但这可能并不意味着您认为它的意思。 这是要单方面让他的申请更快?我能想到许多不真实的情况,饥饿? 这个答案没有意义,原因与问题没有意义的原因相同:你没有提供任何细节。将数据加载到内存中与什么有关?比什么更快? 我进行了分析,这是我的问题和代码的答案。无需为此跳楼,这并不是对所有可能的情况的冗长解释,这是我节省时间的一种快速而肮脏的方式(我没有这样做,因为人们似乎比一般结果更关心具体情况)。我认为这是大多数简单程序中通常发生的情况。将数据加载到内存中是我的程序所做的事情之一,最好(更快)一次而不是 2、3 次或更多次。

以上是关于如果多个线程使用同一个对象,性能会受到影响吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用synchronized关键字可能会使性能下降100倍是怎么来的

创建线程总是对性能有好处吗?

带有索引的 MySQL 表:许多插入/更新会影响性能吗?如果是,如何再次加快速度?

原子对象是不是受到保护免受竞争条件的影响?

concurrent包分析之Executor框架

Java套接字多线程安全吗?