并发开发

前两天陪一个小伙伴看并发编程的项目,这里总结一下。

在long long ago的最开始,使用并发编程其实是解决低速的IO操作和高速的cpu运行速度不匹配的问题,再然后有了cpu出现多核的现象,有了并行思想就可以将多核cpu协同工作。

再然后,出现了类似于我们现在网线一样的东西,并行程序能够让多台计算机进行协同工作完成复杂的任务。

其实现在google的超大规模集群也是一个大型的并行程序在上面运行,只是这个程序非常大,而且自动管理这个用高速通道链接的集群,所以我们交它为超规模的集群操作系统。

怎么来完成这个并行程序的管理起来,让这个集群快速的完成我们的任务呢,就是非阻塞机制,让集群发挥最大的工作能力,而不是等待。

后来有了异构运算的设备,比如GPU,TPU这些,CPU的机制是通过流水线,复杂运算指令集和状态管理来完成我们的日常工作,这是在指令集中寻找高并发操作。

而GPU和TPU大致是通过多核来完成复杂的操作,但是我感觉很遗憾的是,这些核心现在统一时间,同一批次只能运行一个指令,虽然人多力量大,但是运算的复杂性往往不能和cpu向对比,希望以后的并行运算硬件能够做到非相关任务之间的并行吧,估计也不太远了,伟大的祖国说不定可以弯道超车呢,哈哈。

话说回来,其实并行运算,就是重在各个运算核心的协同。在项目源码中,大量的使用链表来完成这个目的,链表的作用相当于流水线,执行得快一点的结果就堆在链表这个生产线上,可以让多个程序来一起完成,而不是一对一的等待一个程序来接手处理,宏观来看,就是快速执行整个工作流程。

起点
普通运算节点
普通运算节点
快速运算节点1
慢速运算节点2
慢速运算节点3
慢速运算节点4
慢速运算节点5
快速运算节点2
结束

上图处理流程看起来很复杂,通过添加缓慢的运算节点协同工作,来处理释放快速运算的能力,而不是等待,整个图看起来很复杂,其实可以通过简单的数据链表和同步机制完成,以后就是并行运行的硬件来完成。

哈哈,欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值