Java并行程序设计模式小结】的更多相关文章

这里总结几种常用的并行程序设计方法,其中部分文字源自<Java程序性能优化>一书中,还有部分文字属于个人总结,如有不对,请大家指出讨论. Future模式 一句话,将客户端请求的处理过程从同步改为异步,以便将客户端解放出来,在服务端程序处理期间可以去干点其他事情,最后再来取请求的结果. 好处在于整个调用过程中不需要等待,可以充分利用所有的时间片段,提高系统的响应速度. JDK中已经内置实现了FutureTask,使用起来非常方便,同时还可以取消Future任务,或者设置Future任务的超时时…
Java进阶7 并发优化2 并行程序设计模式20131114 1.Master-worker模式 前面讲解了Future模式,并且使用了简单的FutureTask来实现并发中的Future模式.下面介绍的是Master-Worker模式. 这个模式也是经常使用的并发模式之一,核心思想就是系统有两类线程协同工作:Master线程和Worker线程.Master线程负责接收和分配任务,Worker线程负责处理这些子任务.当每一个worker线程处理完成之后,将结果返回给Master线程,有Maste…
基于都志辉老师<MPI并行程序设计模式>第14章内容. 前面接触到的MPI发送的数据类型都是连续型的数据.非连续类型的数据,MPI也可以发送,但是需要预先处理,大概有两类方法: (1)用户自定义新的数据类型,又称派生类型(类似定义结构体类型,但是比结构体复杂,需要考虑<类型,偏移量>两方面的内容) (2)数据的打包和解包(将不连续的数据给压缩打包到连续的区域,然后再发送:接受到打包数据后,先解包再使用) 这样做的好处,我猜一个是可以有效减少通信的次数,提高程序效率:另一方面可以减轻…
Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/128050125来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 假设t1,t2先后两个线程,都执行如下代码: synchronized(Obj) { Obj.wait(); } t1先进,最后在Obj.wait()下卡住,这时java管t1的状态waitting状态t…
JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级的进程,是程序执行的最小单位.(PS:使用多线程去进行并发程序的设计,是因为线程间的调度和切换成本远小于进程) 线程的状态(Thread的State类): NEW–刚刚创建的线程,需要调用start()方法来执行线程: RUNNABLE–线程处于执行状态: BLOCKED–线程遇到synchroni…
JAVA并行程序基础二 线程组 当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里. activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估计值. stop()可以停止当前线程组里的所有线程,但会遇到与Thread.stop()相同的问题,尽量不用. 守护线程 守护线程是系统的守护者,在后台默默地完成系统性的服务,如垃圾回收线程,JIT线程.与之对应的是用户线程,用户线程可以看做系统的工作线程,当系统工作线程全部执行完毕,那么整个系统将…
JAVA并行程序基础一 线程的状态 初始线程:线程的基本操作 1. 新建线程 新建线程只需要使用new关键字创建一个线程对象,并且用start() ,线程start()之后会执行run()方法 不要直接调用run()方法,它只会在当前线程串行执行run()中的方法. 重载run()方法有两种方式 直接继承Thread类 实现Runnable接口 它只有一个run()方法 在new Thread()时将接口实现类传入 2.终止线程 一般线程在执行完毕就会结束,无需手动关闭.但java也提供手动关闭…
2.8 程序中的幽灵:隐蔽的错误 2.8.1 无提示的错误案例 以求两个整数的平均值为例.请看下面代码: int v1 = 1073741827; int v2 = 1431655768; System.out.println("v1 = " + v1); System.out.println("v2 = " + v2); int ave = (v1 + v2) / 2; System.out.println("ave = " + ave); 输…
这里的内容主要是都志辉老师<高性能计算之并行编程技术——MPI并行程序设计> 书上有一些代码是FORTAN的,我在学习的过程中,将其都转换成C的代码,便于统一记录. 这章内容分为两个部分:MPI对等模式程序例子 & MPI主从模式程序例子 1. 对等模式MPI程序设计 1.1 问题背景 这部分以Jacobi迭代为具体问题,列举了三个求解Jacobi迭代问题的MPI对等模式程序. 这里需要阐明一下,书上的Jacobi迭代具体的背景可以参考这个内容:http://www.mcs.anl.g…
在Java程序中,多线程几乎已经无处不在.与单线程相比,多线程程序的设计和实现略微困难,但通过多线程,我们却可以获得多核CPU带来的性能飞跃,从这个角度说,多线程是一种值得尝试的技术.那么如何写出高效的多线程程序呢? 有关多线程的误区:线程越多,性能越好 不少初学者可能认为,线程数量越多,那么性能应该越好.因为程序给我们的直观感受总是这样.一个两个线程可能跑的很难,线程一多可能就快了.但事实并非如此.因为一个物理CPU一次只能执行一个线程,多个线程则意味着必须进行线程的上下文切换,而这个代价是很…