同期処理のモジュール化を 能にする.pptVIP

同期処理のモジュール化を 能にする.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
同期処理のモジュール化を 能にする

同期処理のモジュール化を 可能にする アスペクト指向言語 理学部 情報科学科 04_00290 赤井駿平 指導教員 千葉滋 同期処理の分離の必要性 同期処理を適用する範囲を切り替えたい 同期処理は計算機の特性により最適な粒度が変化 Javassistのバグレポート [JASSIST-28 : /jira/browse/JASSIST-28] 細かい粒度と粗い粒度の同期処理を切り替えて,動作速度を調べる 同期を行う箇所が散らばっているので切り替えが大変 アスペクト指向言語による同期の分離 - コード範囲をポイントカットすることの困難さ Fragile pointcut problem ソースコードを変更により 意図してしない場所をポイントカットしてしまう 意図した場所をポイントカットできなくなってしまう 範囲のポイントカットはソースコードの変更に弱い 例:行番号の指定 改行を追加するだけで意図した場所をポイントカットできなくなる ソースコードの変更に強い指定方法が必要 Fragile pointcut problemの要因 プログラムのブロック構造の変化 GluonJ/R [熊原ら ’07] 始点?終点をポイントカットで指定 ブロックの構造を無視したポイントカットを行えてしまう 適用できるアドバイスは例外処理のみ 類似したコード範囲の出現 LoopsAJ [Harbulot et al. ’06] ループのみポイントカット可能 メソッド内のループの区別ができない 取得するコンテキストに含まれる変数の名前?順序の変更 ローカル変数をアドバイスで利用したい ローカル変数の指定方法を工夫しないと,fragile pointcut 提案:ブロックポイントカット ブロックのような複数の実行点を含む範囲をジョインポイントとして指定 その範囲に対しアドバイスを実行できる 同期処理の分離や差し替えが容易 ソースコードの変更に強い範囲の指定方法 Fragile pointcut problemに対処可能 ポイントカットする範囲に条件を指定する 取得するコンテキストの指定 ブロック構造を考慮した範囲の指定 begin/endポイントカット 始点,終点となるジョインポイントを指定し,その2点間がポイントカットされる ブロックの深さが違う場合は,同じ深さまでブロックをさかのぼる 制御構造やブロックと重ならないように範囲を決定 類似したコード範囲の区別 include/excludeポイントカットを利用して絞り込む 範囲の中に含まれなければいけない,含まれてはいけないジョインポイントを指定 コンテキストの取得 同期処理を行う場合,ローカル変数を取得できなければならない 型を指定して取得するローカル変数を選ぶ 変数の名前や宣言順で指定すると fragile pointcut problem が起こりやすい 実装 AspectJを拡張 AspectBench Compiler を改造して実装 中間表現上にブロック,制御構造,文の情報を記録する 開始?終了を表す命令を新たに用意し,前後に挿入 ブロックを解析し,ポイントカットで指定された条件にマッチする範囲を選ぶ 適用例 Javassistのバグレポートにおける同期処理の粒度を切り替える 粗い粒度の場合 適用例(続き) 細かい粒度の場合 速度の測定 Javassistの同期の粒度をアスペクトを用いて変更し,バグレポートに投稿されたマイクロベンチマークを使用して実行時間を測定(1000回試行) 4コア,40スレッド 細かい粒度 : 平均実行時間 8.97秒,標準偏差 0.36 粗い粒度 : 平均実行時間 11.94秒,標準偏差 0.17 2コア,40スレッド 細かい粒度 : 平均実行時間 13.31秒,標準偏差 1.02 粗い粒度 : 平均実行時間 13.08秒,標準偏差 0.26 粒度の切り替えによる性能の向上 2コアで40スレッドの場合,粗い粒度の方が安定した速度 速度の安定性を考えると,粗い粒度の方が良い性能を出すことが分かる まとめと今後の課題 範囲をポイントカットする機構を提案 同期処理を分離して記述することができる AspectBench Compilerを改造して実装 Javassistに適用して実験 今後の課題 コンテキスト渡しの指定方法の改善 より柔軟な範囲の指定方法 * * public class ProxyFactory { public Class createClass() { if (thisClass == null) { ClassLoader cl = getClassLoader();

您可能关注的文档

文档评论(0)

book1986 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档