快速业务通道

构建可扩展的Java EE应用(一) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
决方案是一个耗时并且容易出现错误的工作。在 我们实验室中的一个项目中采用了JOMP来为其单线程的任务获得并行性。JOMP是 一个基于线程的SMP并行编程的Java API。就像OpenMP,JOMP也是根据编译指示来 插入并行运行的代码片段到常规的程序中。在Java程序中,JOMP 通过//omp这样 的指示方式来表示需要并行运行的部分。JOMP程序通过运行一个预编译器来处理 这些//omp的指示并生成最终的java代码,这些 java代码再被正常的编译和执行 。JOMP支持OpenMP的大部分特性,包括共享的并行循环和并行片段,共享变量, thread local变量以及reduction变量。以下的代码为JOMP程序的示例:

Code list 8:

Li n k e dLi s t c = new Li n k e dLi s t ( ) ; c . add ( " t h i s " ) ; c . add ( " i s " ) ; c . add ( " a " ) ; c . add ( "demo" ) ; / / #omp p a r a l l e l i t e r a t o r f o r ( S t r i n g s : c ) System . o u t . p r i n t l n ( " s " ) ;

就像大部分的并行编译器,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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号