在单线程环境中使用像 Hashtable 这样的线程安全集合 类 有什么缺点吗?
Is there any disadvantage of using thread safe collection classes like Hashtable in single thread environment?
面试官问我在单线程环境下使用像Hashtable这样线程安全的class有什么缺点?有什么缺点吗?如果不是那为什么后面会介绍非线程安全的class?
- 它们在单线程环境中速度较慢。现代 JIT 在单线程环境下使用 synchronized class 非常有效,但并不完美。
- 它们在多线程环境中要慢得多。如果你有不可变的集合,你可以安全地从不同的线程使用,但同步集合会工作得慢得多。
- [design] 它的锁定语义几乎没有用,所以无论如何都需要额外的同步。你很少需要只读或写,大多数时候你读然后写,你希望它是原子的。或者您想允许多个同时读取。
I was asked by the interviewer about disadvantages of using thread safe class like Hashtable in single threaded environment?
虽然大多数缺点都与性能有关,但还是有的。即使单线程环境中也有多个线程(想想 GC、终结器、信号处理程序、JMX 等),所以语言仍然需要遵守同步结构,例如 synchronized
、volatile
和本机锁实现。这些语言功能刷新或使内存缓存无效并影响代码重新排序,这两者都会显着影响整体 运行 时间性能。
if not then why are there non thread safe class introduced later?
非线程安全对象在单线程或多线程应用程序中总是比线程安全对象表现得更好。处理本地 CPU 缓存内存的能力是现代硬件提供的主要速度提升之一。如果您不必连接到主内存总线,则可以更快地执行操作。同步结构降低了缓存内存的使用能力。
最后,线程安全的 classes 通常在涉及的数据结构以及它们在多线程应用程序中正确运行所需的逻辑方面更加复杂。这意味着即使我们忽略同步结构,它也可能使用更多的内存和 运行 更慢,尽管这种情况的程度非常依赖于所讨论的特定 class
面试官问我在单线程环境下使用像Hashtable这样线程安全的class有什么缺点?有什么缺点吗?如果不是那为什么后面会介绍非线程安全的class?
- 它们在单线程环境中速度较慢。现代 JIT 在单线程环境下使用 synchronized class 非常有效,但并不完美。
- 它们在多线程环境中要慢得多。如果你有不可变的集合,你可以安全地从不同的线程使用,但同步集合会工作得慢得多。
- [design] 它的锁定语义几乎没有用,所以无论如何都需要额外的同步。你很少需要只读或写,大多数时候你读然后写,你希望它是原子的。或者您想允许多个同时读取。
I was asked by the interviewer about disadvantages of using thread safe class like Hashtable in single threaded environment?
虽然大多数缺点都与性能有关,但还是有的。即使单线程环境中也有多个线程(想想 GC、终结器、信号处理程序、JMX 等),所以语言仍然需要遵守同步结构,例如 synchronized
、volatile
和本机锁实现。这些语言功能刷新或使内存缓存无效并影响代码重新排序,这两者都会显着影响整体 运行 时间性能。
if not then why are there non thread safe class introduced later?
非线程安全对象在单线程或多线程应用程序中总是比线程安全对象表现得更好。处理本地 CPU 缓存内存的能力是现代硬件提供的主要速度提升之一。如果您不必连接到主内存总线,则可以更快地执行操作。同步结构降低了缓存内存的使用能力。
最后,线程安全的 classes 通常在涉及的数据结构以及它们在多线程应用程序中正确运行所需的逻辑方面更加复杂。这意味着即使我们忽略同步结构,它也可能使用更多的内存和 运行 更慢,尽管这种情况的程度非常依赖于所讨论的特定 class