Linux多核并行编程关键技术 (2)

RCU适用的场景很多,其可以替代:读写锁、引用计数、垃圾回收器、等待事物结束等,而且有更好的并行扩展性。但RCU也有一些不适用的场景,如写侧重;临界区长;临界区内休眠等场景。

不过,所有的无锁原语也只能解决读端的并行可扩展性问题,写端的并行可扩展性只能通过数据分割技术来解决。

数据分割技术

分割数据结构,减少共享数据,是解决并行可扩展性的根本办法。对分割友好(即并行友好)的数据结构有:

数组

哈希表

基树(Radix Tree)/稀疏数组

跳跃列表(skip list)

使用这些便于分割的数据结构,有利于我们通过数据分割来改善并行可扩展性。

除了使用合适的数据结构外,合理的分割指导规则也很重要:

读写分割:以读为主的数据与以写为主的数据分开;

路径分割:按独立的代码执行路径来分割数据;

专项分割:把经常更新的数据绑定到指定的CPU/线程中;

所有权分割:按CPU/线程个数对数据结构进行分割,把数据分割到per-cpu/per-thread中;

4种分割规则中,所有权分割是分割最彻底的。

以上这些多核并行编程内容基本上涵盖了Linux kernel中所有的并发编程关键技术。当然并行编程还有很多其他技术没有应用到Linux kernel中的,如无副作用的并行函数式编程技术(Erlang/Go等)、消息传递、MapReduce等等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgjxd.html