并行开发的基本概念:

  1. 同步(Synchronous)和异步(Asynchronous)
    同步和异步通常用来形容一次方法的调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像消息传递,一旦开始,方法调用就会立即返回,调用者可以进行后续的操作。而异步方法通常会在另外一个线程中真实的执行。整个过程不会阻碍调用者的工作。对于调用者来说,异步调用似乎是一瞬间就完成的。如果异步调用需要返回结果,那么当这个异步调用真实完成时,则会通知调用者。
复制代码
  1. 并行(Parallelism)和并发(Concurrency)

    它们都可以表示两个或者多个任务一起执行,但是它们的偏重点不同。

    并发偏重于多个任务的交替执行,而多个任务之间有可能还是串行的。 真正意义的并行即同时执行。

  1. 临界区

    临界区来表示一种公共资源或者说是共享数据,可以被多个线程使用。但每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个线程,就必须等待。

    在并行程序中,临界区资源是保护的对象,如果意外出现同时执行在临界区执行两个或者多个线程,那么可能出现结果的损坏。

  2. 阻塞(Blocking)和非阻塞(Non-Blocking)

    阻塞和非阻塞通信用来形容多线程间的相互的影响。比如一个线程占用了临界区的资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待。等待会导致线程的挂起,这种情况就是阻塞。此时,如果占用资源的线程一直不愿释放资源,那么其他所有的阻塞在这个临界区上的线程都不能正常工作。

    非阻塞的意思与阻塞的意思相反。它强调没有一个线程可以妨碍其他线程的执行。所有的线程都会尝试不断向前执行。

  3. 死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)

    死锁:

    图中路口的四辆小车,在这种情况下都无法进行继续执行了。它们彼此之间相互占用了彼此的车道,如果大家不愿意释放自己的车道,那么这个状态将永远维持下去,谁都不可能通过。

    饥饿:

    饥饿是指某一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行。比如它的线程优先级可能很低,而高优先级的线程不断抢占它所需要的资源,导致低优先级的线程无法工作。另外一种可能,某一个线程一直占着关键的资源不放,导致其他需要这个资源的线程无法正常执行,这种情况也是饥饿的一种。与死锁相比,饥饿还是有可能在未来的一段时间内解决的(比如高的优先级的线程已经完成任务,不再疯狂的执行)。

    活锁: 活锁是一种有趣的情况。例如:当你要坐电梯下楼,电梯到了,门开了,这时正准备出去。这时门外有一个人挡着你的路,他想进来,于是你靠左走,避让对方。同时对方靠右走希望避让你。结果你两就撞上了。于是你们意识到了问题,希望尽快避让对方,你立即向右走,同时他立即向左走。结果又撞上了,但醉香红你两肯定能顺利的通过。但是这种情况发生在两个线程之间可能就不会那么幸运了。线程之间都秉承着谦让的原则,主动将资源释放给他人使用,那么就会出现资源不断在两个线程之间跳动,而没有一个线程可以同时拿到锁有的资源而正常执行。这种情况下就是活锁。

  4. 并发的级别

    由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,可以将并发的级别进行分类,大致上可以分为阻塞、无饥饿、无阻碍、无锁、无等待几种。

  5. 阻塞(Blocking)

    一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当使用synchronized关键字,或者冲入锁时,得到的就是阻塞的线程。

    无论是synchronized或者重入锁,都会试图在执行后续代码前,得到临界区的锁,如果得不到,线程就会被挂起等待,直到占有了所需资源为止。

  6. 无饥饿(Stavation-Free)

    如果线程之间是有优先级的,那么线程调度的时候总是会倾向于满足高优先级的线程。也就是说,对于同一个资源的分配,是不公平的!对于非公平的锁来说,系统允许高优先级的线程插队。这样有可能导致低优先级线程产生饥饿。但如果锁是公平的,满足先来后到,那么饥饿就不会产生饥饿。这时所有的线程都有机会去执行。

  7. 无锁(Lock-Free)

    – 是无障碍的

    – 保证有一个线程可以胜出

    while (!atomicVar.compareAndSet(localVar, localVar+1)) { localVar = atomicVar.get(); }

  8. 无等待(Wait-Free)

    – 无 锁 的

    – 要求所有的线程都必须在有限步内完成

    – 无饥饿的

  9. 无障碍(Obstruction-Free)

    – 无障碍是一种最弱的非阻塞调度

    – 自由出入临界区

    – 无竞争时,有限步内完成操作

    – 有竞争时,回滚数据

有关并行的两个总要的定律:

  1. Amdahl定律(阿姆达尔定律)

    – 定义了串行系统并行化后的加速比的计算公式和理论上限

– 加速比定义:加速比=优化前系统耗时/优化后系统耗时
复制代码
  1. Gustafson定律(古斯塔夫森)

    –说明处理器个数,串行比例和加速比之间的关系

只要有足够的并行化率,那么加速比和CPU个数成正比

并行开发的基本概念及两个重要的定律相关推荐

  1. C#并行开发_Thread/ThreadPool, Task/TaskFactory, Parallel

    大家好,本次讨论的是C#中的并行开发,给力吧,随着并行的概念深入,哥也赶上这个潮流了,其实之前讨论C#的异步调用或者C#中BeginInvoke或者Invoke都已经涉及了部分本篇的内容. 参考书目: ...

  2. 8天玩转并行开发——第六天 异步编程模型

    原文:8天玩转并行开发--第六天 异步编程模型 在.net里面异步编程模型由来已久,相信大家也知道Begin/End异步模式和事件异步模式,在task出现以后,这些东西都可以被task包装 起来,可能 ...

  3. 并行开发 4.同步机制(上)

    原文:8天玩转并行开发--第四天 同步机制(上) 在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合.虽然task自带了两个方法:task.ContinueWith()和Task.Factor ...

  4. 6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  5. iOS开发系列--并行开发其实很容易

    --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...

  6. bucket sort sample sort 并行_IBM布局AI硬件大杀器:硬软件并行开发、开源模拟AI工具包...

    原标题:IBM布局AI硬件大杀器:硬软件并行开发.开源模拟AI工具包 智东西(公众号:zhidxcom) 编 | 子佩 智东西11月4日消息,为了解决AI对数据.能源和内存资源的巨大需求,IBM一直致 ...

  7. Git学习文档之一 学习文档-并行开发

    ##并行开发 ###集成管理员工作流 由于 Git 允许使用多个远程仓库,开发者便可以建立自己的公共仓库,往里面写数据并共享给他人,而同时又可以从别人的仓库中提取他们的更新过来.这种情形通常都会有个代 ...

  8. 测试开发工程师的概念怎么来的?

    测试开发工程师的概念怎么来的? 这个名词一开始并不叫测试开发,只是说懂技术,懂研发的测试工程师,后来这个词又很长,再加上以前测试开发曾经在老的时代是有一个对应的词的,从微软的时代的时候,微软就把工程师 ...

  9. (转载)H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 一.H5 的含义 二.原生应用 2.1 概念 2.2 优点 2.3 缺点 三.Web 应用 3.1 概念 3.2 优点和缺点 3.3 Web APP 的劣势 3. ...

最新文章

  1. 「android」查看应用占用cpu和内存消耗情况
  2. java 等比缩放图片_java处理图片按比例缩放功能
  3. postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...
  4. Linux工程师新法宝:在Visual Studio上用C++ 写Linux
  5. vue mint-ui 弹出框
  6. c# sha1签名 微信_C#微信公众号JS接口签名算法
  7. 小学计算机教育实习教案,小学信息技术教师资格证面试教案模板:《漂亮的剪贴画》...
  8. kafka retries参数入门
  9. (转)SDL1.2到2.0的迁移指南
  10. Python:关于装饰器的理解
  11. 高斯09linux教程,Gaussian 09的安装与使用
  12. 推荐:3个Python好用的PDF库
  13. element 源码学习五 —— Notice 系列组件学习
  14. excel 多行 取消隐藏_如何在Excel 2013中隐藏和取消隐藏行和列
  15. 理论算法两手抓,UIUC助理教授孙若愚60页长文综述深度学习优化
  16. ubuntu下载BT种子安装qBittorrent
  17. [结构光三维重建] 2、基于结构光的三维重建系统工作原理总结
  18. 如何设计大型集团一体化IT运维系统
  19. for语句(循环结构)
  20. 用c++做一个弹窗恶搞——类似病毒但没危害

热门文章

  1. [LeetCode] 513. Find Bottom Left Tree Value_ Medium tag: BFS
  2. MySQL存储过程事务处理
  3. 结对编程项目的过程记录与收获
  4. ubuntu 在vm中如何上网及注意问题
  5. 15款精美的 WordPress 电子商务网站模板
  6. SQL语句inner join,left join ,right join连接的不同之处
  7. FTP服务器配置固定IP才能访问
  8. Guava事件处理组件Eventbus使用入门
  9. idea卸载删除旧版重新安装新版后,新版本idea程序打不开闪退的解决方案
  10. 技术优点_波纹管内衬管制造技术及优点