- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java线程数据流化的研究
Java线程数据流化的研究
摘#8195;要多核处理器环境日益普及,针对此体系结构的应用程序的并行性研究已成为焦点。 面向对象程序设计语言中通常是用线程来实现应用程序的并行性,但线程间的同步和通信实现起来往往很复杂且不能充分利用多核优势。提出一种基于数据流及Java扩展库的多线程实现解决方案,给出一种新的多线程编程方法。结果表明该方法不但容易实现且更能充分利用多核优势。
关键词多核;并行;数据流Java;线程;组件
中图分类号TP391文献标识码A文章编号1673-9671-(2010)091-0035-01
多核体系结构下的性能优化编程是目前的研究热点问题之一。Java是一种非常流行的面向对象编程语言,具有许多易于编程和调试的特点。Java内建的多线程编程的并发性建立在线程和管程基础上,这种模型易于学习和理解,但在实际应用中存在很多问题:容易出错、难以验证、扩展性差等等。即使有经验的程序员所编写的多线程程序,仍易包含数据竞争、死锁、饥饿等难以监测和调试的错误,并且当问题复杂性增加时,多线程的Java程序非常难以扩展。
在多核多线程体系结构上,较为理想的并行模型是混合型的设计方案。在细粒度上保持程序的串行特征;在粗粒度上适当引入并行特性,使并行程序在执行时较易映射到体系结构的线程级并行。对此提出了一种基于数据流Java的Java线程数据流Java化的设计方案,其主要思想是将一个Java线程描述成数据流Java程序,从而简化程序的设计方案。
1数据流Java程序设计模型
在数据流网络模型中,各个运行单元之间的同步和通信是通过显式的数据传递来完成的。由于禁止了运行单元之间的隐式数据共享,避免了多线程模型的数据竞争和冲突,有利于程序的形式化分析和验证。数据流模型能够帮助程序员自然地表达应用程序的内部并行性,减少编译器并行化分析和优化的难度。在数据流 Java 模型,数据流 Java 中最小的独立运行的单元叫做组件(component),它对应于我们通常的进程或线程。组件内只能串行执行,一个数据流 Java 程序可以拥有多个组件,各个组件之间可以独立运行。
对于多核处理器而言,组件的局部内存空间可以容易地映射到单个处理单元的局部存储器上,全局内存空间可以映射为多个处理单元共享的存储器。由于多核处理器内部的通信延迟和通信带宽都远远优于对称多处理器,因此局部内存空间之间的数据对象的传输可以通过处理单元之间的快速通信机制来完成。
数据流Java的编程接口目前是以库的方式实现的,以JavaFBP 为基础进行扩展。Java扩展库的实现基于 JavaFBP 库,在保留了部分JavaFBP接口的基础上重新进行了扩展实现。Component类是所有组件的基类,它含有两个抽象方法execute()和 openPorts()以及存储输入/输出端口的成员变量InputPort类是输入端口,提供了 receive()方法;OutputPort类是输出端口,提供了 send()方法。输入端口和输出端口均含有虚拟机中实际端口实例的指针,用于真正地发送和接收数据InitializationlnputPort是参数端 ,它是输人端口的子类,其成员变量 content用于保存获得的参数对象。Network类是 Component的子类 ,使得网络可作为一个组件与其他组件进行协作,其成员变量components包含了所有属于这个网络的组件。
2Java 线程数据流化的研究与实现
为便于说明,将以实例来研究如何将线程转化成数据流Java程序[1]。线程间的同步是指若干个线程共享同一个类对象,并且每个线程都调用同一个方法以便修改该类对象的状态。此时被共享的类对象成员一般要加上static关键词,被同步的方法首部或方法体内要用同步关键词synchronized加以修饰,有些甚至还要用到wait()和notitf()方法。如银行帐号类Cbank:
public class CBank{
#8195;private static int s=2000;
public synchronized static void sub(int m){
#8195;#8195;int temp=s;temp-=m;
#8195;#8195;……
#8195;#8195;s=temp;System.out.println(s=+s);
}}
在数据流Java化的过程中,银行帐号类Cbank中不必加上static、synchronized关键词,可做如下简化:
public class CBank{
#8195;private int s;
#8195;pu
您可能关注的文档
最近下载
- 慢性肾衰竭合并急性心力衰竭病人的护理查房ppt演讲.pptx VIP
- 黄山学院《高等数学E(上)》2025 - 2026学年第一学期期末试卷(A卷).docx VIP
- 幼儿行为观察与指导第十章--幼儿园对个别儿童的观察与指导.ppt VIP
- 幼儿园大班社会《七只小猪去旅行》PPT课件.pptx VIP
- 医疗机构内部控制与合规风险管理启示.pptx VIP
- 腋静脉应用解剖学与穿刺技术.ppt VIP
- 倪海厦经方治感冒简易图表介绍.ppt VIP
- 超文本传输协议HTTP .ppt VIP
- 【事业单位考试真题】2022年江西省交通投资集团有限责任公司校园招考聘用冲刺题(附答案解析).docx VIP
- 倪海厦伤寒论经方使用说明书.docx VIP
原创力文档


文档评论(0)