前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊并行并行编程

聊聊并行并行编程

作者头像
哒呵呵
发布2018-08-06 15:01:50
9980
发布2018-08-06 15:01:50
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

并行编程主要聚焦于性能,生产率和通用性上。

所谓性能,更像是可扩展性以及效率。不再聚焦于单个CPU的性能,而是在于平均下来CPU的性能。这个来源于摩尔定律的失效,

霍金曾经提过限制IT发展的终究会是1.光速(这个已经在分布式系统上更能看出来,通信的瓶颈限制着速度)2.物质的原子性(来源于不可测准原理)

并行编程开始了,即使很难。

并行和并发有着小小的区别:并行意味着问题的每个分区有着完全独立的处理,而不会与其他分区进行通信。并发可能是指所有的一切事务,

这可能需要紧密的,以锁的形式或其他的互相通信的方式形成的相互依赖。

因为并行编程的相对较难,导致工程师的生产率不会太高,会聚焦于更精密的细节,花费大量的时间。

通用性也是一个问题,当为了通用性,势必需要程序语言进行更为抽象,例如java至于C/C++的学习成本和开发成本。

单纯的CPU数量增加也会产生新的瓶颈影响性能提升:比如主存的大小,一个线程消耗了所有的可用内存,其他线程将会没有内存。缓存,特别是为了弥补内存和CPU的速度差异产生

的CPU缓存。内存带宽,这个也不可小视,因为计算机内部数据的传输并不是无限大的。I/O带宽,这个直接限制了程序的运行速度。

并行任务变得复杂不仅仅在于之上的原因,更因为:

1.对代码,对任务的分割,这会导致错误处理以及事件处理更为复杂。如果并行程序之间会牵扯到交互,通信的时间成本,共享资源的分配和更新更为复杂。启动的线程

过多,CPU缓存就会溢出,从而导致过高的缓存未命中,影响性能。

2.并行访问控制,单线程的应用程序可以对本实例中的所有资源具有访问权,例如内存中的数据结构,文件之类的。但是并行程序中,对变量的访问会牵扯到消息传递,并且协调对共享

资源的访问,需要使用到引用计数,锁,事务等方式同步

3.特定算法的固有顺序

还有更多的人为因素,代码的可读性,项目对共享资源的管控之类。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档