欢迎来到天天文库
浏览记录
ID:31978966
大小:3.71 MB
页数:78页
时间:2019-01-30
《基于即时编译器的java语言同步优化-研究》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第l章绪论第1章绪论由于功耗和散热问题,提高时钟频率不再是提升处理器性能的主要可行方式川。一些新兴的并行体系结构不断产生并普及,主流应用程序由单线程向多线程转变已经是大势所趋。结构良好的并行程序可以受益于处理器以及线程数目的持续增长,但是,生成高效健壮安全可靠的并行程序并非易事,其中以并发同步策略的设计和实现最为关键。协调多个线程的同步策略的好坏直接影响程序的性能和J下确性,是提高程序生产率的瓶颈。鉴于这种情况,一系列围绕同步机制的研究随之展开。实现多线程间同步的一种主要方式是对共享数据加锁,锁是一种悲观保守的同步控制方式,能安全、简
2、单、有效地实现对共享数据的保护,但锁操作本身的丌销非常大,而且由于其过于悲观保守,在实际中会出现大量冗余的锁操作,这样对整个程序的运行效率会产生极大的负面影响。本文以Java语言为例,着眼于优化改进Java程序中的锁同步调用,以提高程序的运行效率。本章首先对所需解决的问题作出详细的介绍,接着对当前国内国际上的相关工作做出分析和比较,最后给出本文的研究内容。1.1问题描述Java作为一种多线程程序设计语言,为了保证多线程安全,Java标准库中的很多类都必须设计成线程安全的,也就是在访问共享数据时显式添加同步操作,如Vector、Hash
3、table等,程序可以在多线程环境中简单安全地使用这些库所提供的功能。程序员除了可以通过调用Java标准库中各个线程安全的类和方法外,还可以利用Java中的同步方法和同步代码块来实现多线程对共享数据的互斥访问,以确保程序的正确性。虽然Java中的同步机制(包括同步方法和同步代码块)能方便地保证多线程的安全,但是同步会给多线程程序的运行带来非常大的开销。据研究表明,“同步开销通常占总体执行时间的5%.10%”[21:在对Marmott31的测试中,“5个中等大小的单线程程序在同步上花费了26%,-.60%的时间”,可以想象同步优化的重要
4、性绝对不可忽视。同步优化(SynchronizeOptimization)是指降低同步操作的开销,提高程序的整体性能。为了减小同步操作的开销,一些方法直接改良同步原语(primitive)的实现,比如thinlockt7】和lockreservationI引。还有一些方法利用静态程序分析技术自动分析消除不必要的同步操作fI睨11。这些程序分析方法大体可以分成两种类型:1)基于逃逸分析(EscapeAnalysis)tm谗】,只要在线程T对对象O的同步操作期间没有其他线程T’对O做同步,那么T中对O的同步就可以删除。现有的第1章绪论方法
5、都是对这个同步删除条件的某种保守近似。比如,有的方法【101分析程序是否只有一个线程,如果是单线程程序,则不需要做同步,这种方法的缺点是无法处理多线程程序。Java应用程序中常有些单线程程序使用JDK中的帮助线程,这样,这些程序实际是多线程的,但是帮助线程并不和主线程共享数据;有的程序分析方法I101会鉴别出那些在程序执行中除了创建线程,不会有其他线程访问的对象(thread.10cal对象),这些对象是不需要同步的。比较精确的逃逸分析一般开销都很大,而且对单线程或是那些同步数据结构存储在静态变量中的程序处理结果很差。2)基于锁粗化(
6、LockCoalescence)t19—211,如果线程T在获得同步锁而未释放该同步锁期间又获取同一个同步锁,那么第二个同步锁获取是不必要的;如果线程T连续多次获得并释放同一个同步锁,那么这多对同步锁操作可以合并成一对,以减少同步锁操作的数量。如果只进行过程内的分析,分析的开销一般都很小,能减少的同步锁操作的数目也不多:但是如果进行全局的过程间分析,分析的开销便会成倍增长,而能减少的同步锁操作的数量未必会有明显的增加。这一类同步优化算法还有一个不得不考虑的问题就是多个同步锁合并之后同步区域的范围增大,在多线程的环境下会引起程序并发度的
7、下降,尤其是在线程数非常多的情况下,对并发度的影响会更加明显。现有的研究都能从各个角度在一定程度上降低Java多线程程序的同步开销,但都存在各自的弊端,即使是精确的逃逸分析或者过程间的锁粗化算法也只能用巨大的开销换取微薄的性能改进。本文所做的研究力求改变这一现状,1)充分挖掘过程内的锁粗化算法,提出一种自动外提循环中的同步操作的过程内锁粗化算法,具备过程内锁粗化算法开销小的特点,同时能与其他过程内锁粗化算法结合,进一步减少同步操作的数量:2)提出一种过程间的同步方法优化框架,该框架旨在分析出无须同步的同步方法调用点并将其改成对相应同步
8、方法的非同步版本的调用,使锁粗化算法的优化范围从过程内扩展到过程间,增加更多的优化机会,但又避免了传统过程间程序分析开销大的缺点。1.2相关工作近年来,同步优化已经在很多Java编译运行系统中实现。目前的对Java同步优
此文档下载收益归作者所有