多核和多CPU编程——基础数据结构

一、并发并行计算常用的数据结构

其实数据结构是通用的,但是在并行计算中,一般需要对任务和数据进行拆解,以最大化的达到并行执行的目的。在这个过程中,有一些数据结构就更适合在这个场合下应用,这也是介绍这些常用数据结构的目的。一般来说,在并行设计开发和应用中,常用的数据结构包括:数组、链表、哈希和树。
但是,这并不代表其它的数据结构不能在并行设计中使用。只是说,上面几种应用的比较多而已。同样,这几种数据结构并不是说单纯一个就包打天下,经常是几种混合在一起应用,你中有我,我中有你的一种共生共用的态势,这样能更好的实现任务的分解和数据的分解使用。

二、数据结构的应用

这几种数据结构在并行设计中常用的方式是什么样的呢?下面进行简要的说明一下,在后面的任务设计和数据分解中会逐一进行分析说明。
1、数组
数组的读取开销是稳定的,这意味着,可以对数组进行分拆,而分拆的意义就是在于可以在多个核心或者多个CPU中进行操作。当然,删除的场景需要特殊设计一下。举一个例子,一个拥有10000个单元的数组,可以分拆成10个组,每个线性的从低到高即可(0999,10001999,…)。每个核心对应的线程可以访问其中一组做为私有数据对象。
同时,数组还可以实现一些相关的数据结构,如栈等。这些数据结构,同样是做为基础的应用而不可或缺。
在实际的应用中,排序、查找这些通常也是使用数组来实现,这也是在并行开发中的一个重要的环节。

2、链表
链表在并行设计中应用在于,任务分解过程中的单元控制。在上面的数组中,可以处理连续的空间,但在实际的应用中,往往不一定是连续的空间出现或者说连续的空间太大不好分配。不过在实际的应用中,链表也可以用实际连续的空间来实现,但表面却用链表来实现,这样分配和回收内存的过程简单方便,又具有了链表的灵活的特性。而且通过两个或三个链表来实现内存池,提高在并行开发中的内存应用效率。

3、哈希
哈希表在小粒度的单元设计开发中,体现不出什么优势来。但在多核心和分布式开发中,哈希表的用处非常大。哈希表的访问在没有冲突的情况下也是稳定的。但有一个前提,这个哈希函数设计的要比较好,否则动不动就有冲突,访问速度反而会退化成其它设计的结构。哈希表在分布式数据系统中应用最广泛的当然是一致性哈希,而在并行设计中,动态处理任务和数据的分解有着重要的应用。比如在服务端并行处理客户端的任务时,就可以通过哈希来动态分配任务队列。

4、树
树是数据结构中,相对复杂的一种数据结构,它一般用来处理数据应用比较多,比如常见的数据库,底层数据的控制就是用B树实现的,而在并行设计中,平衡二叉树(AVL,也叫平衡二叉搜索树),用得相当广泛,另外就是一些复合的树结构,如哈希树(这个树包括红黑树和AVL树等)。在处理动态复杂且需要增删改查需要一个侧重和平衡的过程中,可以不断的选取相关的树的类型。
这种应用典型的是对不同核心上的线程进行动态处理,然后在每个核心线程上再用复杂的树来实现动态的数据管理(增删改查)。比如在游戏中的不同的种类的各方管理,在大数据中的快速查询等等。

5、混合应用
混合应用主要是在复杂的应用场景中出现,比如大规模的数据处理中,既需要快速的定位具体的目标,又需要在目标内进行数据分类处理。这可能就需要数组+链表、数组+树,哈希+链表,哈希+树等等的具体的实现。这些实现方式,不但可以利用这些数据结构中的优点,又尽量的减少了其缺点的暴露。换句话说,把多个数据结构的优点尽量组合起来应用,融合其长,抛弃其短,以抽象的设计和复杂的实现达到应用的高效。
这个最典型的应用当属Google中的分布式查找使用这种MapReduce结构了。

三、总结

数据结构是基础,是设计和实现的砖头瓦块。更灵活的数据结构设计就意味着更好的适应性和可扩展性,这就是代表着整个程序的生命力的一种基础。这篇文章不是具体讲解某几个数据结构的内容的。这些内容在相关的数据结构的书籍上,已经被重复了N遍,如果确实有不清楚的地方,翻翻任何一本相关书籍,都能得到想要的结果。但国内的书籍一个缺点在于,它只着重于如何实现这个数据结构,但对这个数据结构的应用场景,怎么应用?基本上是不提的。而恰恰是这种应用场景的具体应用,才是激发一个设计人员的思想火花的源泉,而只有不断的有这种火花的闪现,才能汇聚在一起,成燎原之势,最后实现一种较好的设计和实现。
实践和理论不结合,就不能产生真正的生产力。计算机技术同样如此。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值