构建可扩展的Java EE应用(一) - 编程入门网
决方案是一个耗时并且容易出现错误的工作。在 我们实验室中的一个项目中采用了JOMP来为其单线程的任务获得并行性。JOMP是 一个基于线程的SMP并行编程的Java API。就像OpenMP,JOMP也是根据编译指示来 插入并行运行的代码片段到常规的程序中。在Java程序中,JOMP 通过//omp这样 的指示方式来表示需要并行运行的部分。JOMP程序通过运行一个预编译器来处理 这些//omp的指示并生成最终的java代码,这些 java代码再被正常的编译和执行 。JOMP支持OpenMP的大部分特性,包括共享的并行循环和并行片段,共享变量, thread local变量以及reduction变量。以下的代码为JOMP程序的示例:
Code list 8:
就像大部分的并行编译器,JOMP也是关注于loop-level和集合的并行运算,研 究如何同时执行不同的迭代。为了并行化,两个迭代之间不能产生任何的数据依 赖,这也就是说,不能依赖于其他任何一个执行后产生的计算结果。要编写一个 JOMP程序并不是容易的事。首先,你必须熟练使用OpenMP的指示,同时还得熟悉 JVM对于这些指示的内存模型映射,最后你需要知道在你的业务逻辑代码的正确的 地方放置正确的指示。 另外一个选择是采用Parallel Java。Parallel Java,就像JOMP一样,也支持 OpenMP的大部分特性;但又不同于JOMP,PJ的并行结构部分是通过在代码中调用 PJ的类来实现,而不是通过插入预编译的指示,因此,"Parallel Java"不需要另 外的预编译过程。Parallel Java不仅对于在多CPU上并行有效,对于多节点的扩 展能力上也同样有效。以下的代码是"Parallel Java"程序的示例: Code list 9: static double[][] d;new ParallelTeam().execute (new ParallelRegion() { public void run() throws Exception { for (int ii = 0; ii < n; ++ ii) { final int i = ii; execute (0, n-1, new IntegerForLoop() { public void run (int first, int last) { for (int r = first; r <= last; ++ r) { for (int c = 0; c < n; ++ c) { d[r][c] = Math.min (d[r][c], d[r][i] + d[i][c]); } } } }); } } }); 构建可扩展的Java EE应用(一)(8)时间:2011-07-08 blogjava BlueDavy扩展使用更多的内存 内存是应用的重要资源。足够的内存对于任何应用而言都是关键的,尤其是数 据库系统和其他I/O操作频繁的系统。更多的内存意味着更大的共享内存空间以及 更大的数据缓冲,这也就使得应用能够更多的从内存中读取数据而不是缓慢的磁 盘中读取。 Java gc将程序员从繁琐的内存分配和回收中解脱了出来,从而使得程序员能 够更加高效的编写代码。但gc不好的地方在于当gc运行时,几乎所有工作的线程 都会被挂起。另外,在gc环境下,程序员缺少调度CPU来回收那些不再使用的对象 的控制能力。对于那些几乎实时的系统而言,例如电信 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |