码迷,mamicode.com
首页 > 编程语言 > 详细

多线程并行计算连载----简介和基础概念

时间:2016-04-21 21:55:03      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

一、背景:

  最近对多核条件下的并行、并发编程感兴趣,专门学习了一下。在此将学习后梳理的知识点写上来,若有不妥之处,望指正。

  环境:因为Java语言对多线程的支持度较好,因此在介绍的时候选用Java来表达相关概念。

  内容:

    1.并行并发的概念、基础知识,Java中基础语法的介绍

    2.并行程序:

      多线程条件下的数组求和算法:介绍普通算法和fork-join 框架在此处的应用;及分而治之的思想

      ...

    3.并发程序:

      ...

      ...

二、并行、并发区别

  并行:把一个大的任务,分解成多个子任务,在多个CPU核心上运行。使用额外的计算资源使程序运行更迅速

     同一个时间点,有多个线程在执行

  并发:在资源有限的条件下,让多线程程序运行的更加正确高效。

     同一个时间段,有多个线程在执行

 

  共享内存:

    单线程:一个运行的程序有一个调用栈,一个程序计数器,静态域和栈内的对象实例都是独享的

    多线程:每个线程都有一个调用栈和一个程序计数器,线程之间可以共享静态域和对象(为了线程之间的读写交互)

 

  并行的困境----加速比:

    从单处理器升级到n路多处理器,并不会提高n倍的计算能力:因为工作中有部分工作必须串行执行。

    加速比S定义为:由一个处理器完成一项工作的时间与采用n个处理器并发完成该工作的时间之比。

    Amdahl定律给出了用n个处理器协同完成一个应用时可获得的最大加速比S:

S = 1 / (1 - p + p /n)
// p是该应用中可并行执行的部分
// n代表n个处理器

    为了理解上面的公式,我们可以举一个例子:10个处理器,并行部分占60%。加速比为:S = 1/(1-0.6+0.6/10) = 2.17

三、Java线程简介

  这里主要概括一下接下来将会用到的,控制线程的一些常用方式,若有不了解的可在网上查找相关资料:

  Thread类中的方法:

    -run(), start():

    调用start()使线程进入就绪状态,线程进入运行状态运行run()方法中的代码,run()方法必需是public访问权限,返回值类型为void。

    -yield(),join():

    join()方法使调用该方法的线程在此之前执行完毕,也就是等待该方法的线程执行完毕后再往下继续执行。注意该方法也需要捕捉异常;yield()方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。

    -sleep():

    使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。

  进行同步的方式:

    -synchronized 标记的方法和对象:

    该关键字用于保护共享数据,当然前提条件是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问到该对象,被Synchronized修饰的数据将被"上锁",阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。

    -wait()/notify()/notifyAll():

    这三个方法用于协调多个线程对共享数据的存取,所以必须在synchronized语句块内使用。synchronized关键字用于保护共享数据,阻止其他线程对共享数据的存取,但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。wait()方法使当前线程暂停执行并释放对象锁标示,让其他线程可以进入synchronized数据块,当前线程被放入对象等待池中。当调用notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。注意 这三个方法都是java.lang.Object的方法。

    -conditions

 

多线程并行计算连载----简介和基础概念

标签:

原文地址:http://www.cnblogs.com/tf-Y/p/5416033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!