聊聊并行并行编程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.特定算法的固有顺序

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

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2017-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

复合事件处理(Complex Event Processing)介绍

近年来,面向服务架构 SOA一直是热门的议题。面向服务架构SOA 使用了比组件、程序(procedure)层次更高的服务做为处理单元,通过开放格式交换标准例如X...

33070
来自专栏Java编程技术

UML建模(活动图)

活动图是UML中一种行为图,它展示了控制流和对象流,并且强调它们的顺序和条件控制流。 下面换种方法,通过引入uml官方例子同时介绍活动图里面元素。

47520
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记02

32240
来自专栏人工智能头条

6月Python开源项目Top 10:如何快速找到抖音上的漂亮小姐姐……

19430
来自专栏CSDN技术头条

流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑

我们经常见到这么一些场景: 微博的列表页面; 各类协同工具的任务看板,比如 Teambition。 ? 这类场景的一个共同特点是: 由若干个小方块构成; 每个小...

32560

来亲自试一试NoSQL

针对Web开发人员,DBA,程序员,本文介绍了NoSQL数据库的基本概念,不同类型及其特性。

22330
来自专栏芋道源码1024

Dubbo源码解析 —— Zookeeper 订阅

前言 上周写完了服务暴露总结之后发现遗漏了一个很重要的点,在dubbo源码解析-zookeeper连接中我们对面试高频题 dubbo中zookeeper做注册...

32970
来自专栏SEO

「知识」你不知道的百度网页分块权重评估方法

29460
来自专栏数据之美

浅谈用户行为分析之用户身份识别:cookie 知多少?

对于数据统计分析或者数据挖掘而言,用户是个非常重要的维度,也是统计分析能落地的基础。一般而言,咱们追踪或者识别一个用户的首选方案是 userID,大多数公司的产...

1.5K60
来自专栏牛客网

乐视 Java 后台工程师,一面,二面,HR面

33500

扫码关注云+社区

领取腾讯云代金券