在多核系统中,例如2、4、8核,我们通常使用互斥锁和信号量来访问共享内存。然而,我可以预见,这些方法将导致具有许多核心的未来系统的高开销。对于未来的许多核心系统,有没有更好的访问共享内存的替代方法。
发布于 2011-09-22 00:00:26
我不确定你将来想走多远。但从长远来看,我们现在所知的共享内存(任何核心都可以访问的单一地址空间)是不可扩展的。因此,编程模型在某个时候将不得不改变,并使程序员的生活变得更加困难,就像我们进入多核时所做的那样。
但就目前而言(可能再过10年),您可以使用事务性内存和其他硬件/软件技巧。
我之所以说共享内存从长远来看是不可伸缩的,原因很简单,就是物理原因。(类似于单核/高频碰壁)
简而言之,晶体管不能缩小到原子的大小(除非有新技术出现),信号的传播速度也不能超过光速。因此,内存将变得越来越慢(相对于处理器),并且在某些时候,共享内存变得不可行。
我们现在已经可以在多插槽系统上看到NUMA的这种效果。大型超级计算机既不是共享内存,也不是高速缓存一致的。
发布于 2011-09-21 21:35:46
Transactional memory就是这样一种方法。
发布于 2011-09-21 23:28:04
1)只锁定你正在访问的内存部分,而不是整个表!这是在一个大的哈希表的帮助下完成的。桌子越大,锁定机制就越精细。
2)如果可以,只锁定写入,而不是读取(这要求在更新“以前的值”时读取它没有问题,这通常是有效的情况)。
https://stackoverflow.com/questions/7500623
复制相似问题