现代计算机和操作系统中有非常强大的并发处理机制。然而,大多数内存分配器依赖于锁来保护对共享状态的访问。锁是一种可靠的解决办法,但它们会降低性能并引入新的问题,例如死锁和饥饿。

因此,研究人员一直在寻找一种更好的方法来支持并发内存分配。一种热门技术是使用无锁、并发内存分配器,其可以提高性能并减少竞争和争用。

SharedArrayBuffers和Atomics是JavaScript中用于共享内存的新机制。与原始的JavaScript数组和对象不同,SharedArrayBuffers提供可共享的内存区域,而Atomics保证了以原子方式访问它们的线程安全性。

我们可以使用SharedArrayBuffers和Atomics实现一个无锁、并发内存分配器。此类算法使用闩锁而非锁来协调访问共享状态,从而提高性能。简而言之,闩锁是一种类似于锁的结构,但它仅允许一个线程进入公共区域。

当一个线程需要访问共享状态时,它会首先尝试使用闩锁锁定其访问。如果它成功了,它就可以访问共享状态,并在完成后释放闩锁。如果另一个线程也需要访问共享状态,它必须等待前一个线程释放闩锁后才能获取它。

由于无锁、并发内存分配器不涉及锁,它们可以避免性能瓶颈和延迟。另外,闩锁可以减少竞争和争用,从而提高性能。

在实践中使用无锁、并发内存分配器可能会涉及到一些挑战和限制。特别是,它们需要精细的初始和终止条件以及对共享内存和闩锁的正确使用。

总的来说,无锁、并发内存分配器是一种新的,值得探究的性能提升技术。使用SharedArrayBuffers和Atomics,我们可以实现这种算法并将其应用于JavaScript中的任何并发应用程序。

详情参考

了解更多有趣的事情:https://blog.ds3783.com/