ECMAScriptspecification在24.4部分定义了Atomics对象。在所有全局对象中,这对我来说更加晦涩,因为在我没有阅读它的规范之前我不知道它的存在,而且谷歌也没有太多引用它(或者这个名字太过分了)非常通用,所有东西都被淹没了?)。根据其官方定义TheAtomicsobjectprovidesfunctionsthatoperateindivisibly(atomically)onsharedmemoryarraycellsaswellasfunctionsthatletagentswaitforanddispatchprimitiveevents因此它具有对象的形
这是MDNdocumentationonAtomics.我无法理解如何在现实生活中使用原子对象,或者它们是否仅供内部使用(即根本不打算调用)。Atomics对象在JavaScript中有什么作用?我该如何使用它们? 最佳答案 此功能是在ECMAScript2017中引入的。SharedMemory和Atomics引入了一种新的内存模型,允许多代理程序使用原子操作进行通信,以确保良好的-即使在并行CPU上也定义了执行顺序。此规范还包括关于Object的新静态方法:Object.values、Object.entries和Object.
我查看了AtomicInteger类(找到here)的Java源代码,以了解实现JVM需要哪些原子原语。我注意到他们使用未记录的UnsafeAPI来实现他们的原子整数操作,他们使用的唯一两个原语似乎是compareandswap和compareandset操作。并且Unsafe类将这些指令实现为本地方法,这让我相信他们正在使用在一般情况下执行这些原始操作的本地指令。然而,并非每个处理器(尽管大多数现代处理器都有)都有一个原生支持这些原语的指令集。现在,即使没有native处理器支持,这些原语也可以由VM以保证与其他VM线程的原子性的方式实现,但不一定与其他native线程。那么java
假设以下两个计数器实现:classCounter{privatefinalAtomicIntegeratomic=newAtomicInteger(0);privateinti=0;publicvoidincrementAtomic(){atomic.incrementAndGet();}publicsynchronizedvoidincrement(){i++;}}乍一看,原子应该更快,更具可扩展性。他们是,我相信。但是它们总是比synchronizedblock快吗?或者当这个规则被打破时存在某些情况(例如SMP/单CPU机器、不同的CPUISA、操作系统等)?