CONCURRENT PROGRAMMING

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
プログラミング第5回 1 while ループ 文字列の操作
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
マルチスレッド処理 (II) Multithreading
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
Javaのスレッドについて 2005年7月6日 海谷 治彦.
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
Step-by-Step Guide on How to Start ALICE Analysis
アルゴリズムとプログラミング (Algorithms and Programming)
オペレーティングシステム 第5回 プロセスの相互排除
オペレーティングシステムJ/K 2004年10月7日
JAVA.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
モデル検査(1) 並行システムとモデル検査 1.並行システム 2.モデル検査 3.モデル検査の実施 4.システムとアルゴリズム
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オペレーティングシステム 第4回 プロセス生成とスレッド
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
そろそろvolatileについて一言いっておくか
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
計算機プログラミングI 第12回 スレッド インターフェース 授業アンケート 計算機プログラミングI (増原) 2003年度.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
アルゴリズムとデータ構造1 2009年6月15日
6.5 セマフォ セマフォ(semaphore): 複数のタスク(もしくはスレッド)が「同期」または「相互排除」の制御のために取得(acquire)・リリース(release)できるカーネルオブジェクトの総称.
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
JAVA入門⑥ クラスとインスタンス.
SMP/マルチコアに対応した 型付きアセンブリ言語
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
全体ミーティング(9/15) 村田雅之.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Presentation transcript:

CONCURRENT PROGRAMMING 6 ソフトウェア工学 Software Engineering 並行プログラミング CONCURRENT PROGRAMMING

プロセスとスレッド 並行システムの実行形態 割り込みとプロセスの切り替え 並行システムの利点 1.並行システム Concurrent Systems プロセスとスレッド 並行システムの実行形態 割り込みとプロセスの切り替え 並行システムの利点

プロセスとスレッド プロセス: 1つの逐次プログラムの実行単位 マルチプロセシング: 複数のプロセスを同時に実行すること Process プロセス: 1つの逐次プログラムの実行単位 Multi-processing マルチプロセシング: 複数のプロセスを同時に実行すること Thread スレッド: 1つのプロセス内の処理をさらに細分化した「軽量プロセス」とも呼ばれるプロセスの一種.複数のスレッドはメモリ空間を共有する. Multi-thread マルチスレッド: 複数のスレッドを同時に実行すること.

並行システムの実行形態 並列 並行 分散 擬似並行 プロセスの切り替え (インタリーブ) Parallel 物理的に結合して同時実行. ハードウェア,ファームウェア 並列 Concurrent 地理的に分散して同時実行. 情報ネットワーク Distributed 並行 分散 Quasi-concurrent 1CPUで見かけ上同時実行. OS 擬似並行 Interleaving プロセスの切り替え (インタリーブ)

割り込みとプロセスの切り替え Interruption 時間切れ (タイマー割り込み) 別のプロセス マウスクリック (入出力割り込み) 処理データ切れ (データ到着待ち) 別のプロセス

並行システムの利点 資源の有効利用 公平性 利便性 入出力のような外部操作の待ち時間に,ほかのプログラムを動かすことができる. 複数のユーザやプログラムが資源を平等に使う仕組みを作ることができる. 利便性 必要なタスクを全部まとめたプログラムを書くよりも,各タスクごとに書くほうが良い.

インタリーブ 相互排他 オブジェクトのロックとスレッドの同期 デッドロック 飢餓,ライブロック 2.並列プログラミングの注意点 インタリーブ 相互排他 オブジェクトのロックとスレッドの同期 デッドロック 飢餓,ライブロック

インタリーブ Interleaving a プロセスA b プロセスB b a インタリーブは 予期できない 制御できない 膨大な数の実行経路を生じる

相互排他 共有変数は相互排他が必要 m = m + 1000; m = m - 1000; MOV A,m (A=5000) Mutual exclusion 共有変数は相互排他が必要 プロセスA m = m + 1000; 共有変数 m=5000 プロセスB m = m - 1000; レジスター A レジスター B MOV A,m (A=5000) 1 ADD A,1000 (A=6000) 2 3 MOV B,m (B=5000) 4 SUB B,1000 (B=4000) MOV m,A (m=6000) 5 6 MOV m,B (m=4000)

オブジェクトのロックとスレッドの同期 スレッド 預金口座 BankAccount オブジェクト 同期 スレッド 口座番号 number Lock Synchronization オブジェクトのロックを取得(acquire) した1つのスレッドだけが,オブジェクトの内部にアクセスできる. オブジェクトにアクセスしたい他のスレッドは,ロックが開放(release)されるまで待つ. スレッド 預金口座 BankAccount オブジェクト 同期 スレッド 口座番号 number ロック 預金残高 balance

デッドロック acquire Scanner acquire Printer acquire Printer acquire Printer Deadlock プロセス A Scanner プロセス B Printer acquire Scanner 1 acquire Printer 2 デッドロック acquire Printer acquire Printer acquire Scanner acquire Scanner acquire Scanner Copy Copy

飢餓,ライブロック request request request acquire fairness acquire request Starvation Livelock Resource プロセス A 優先順位の低いプロセス プロセス B プロセス C request request request acquire acquire fairness request 公平性がない acquire Printer acquire request acquire Scanner acquire Scanner プロセスCは決して資源を獲得できない acquire

Threadオブジェクト run()メソッド スレッドの生成と実行 3.Javaマルチスレッドプログラミング  Threadオブジェクト  run()メソッド  スレッドの生成と実行

Threadオブジェクト Thread worker = new Thread(); worker.start(); スレッドを生成 Threadオブジェクトを new で生成して,start()する. Thread worker = new Thread(); worker.start(); スレッドを生成 スレッドを実行 しかし,これではプログラマが実行させたい動作を書けない.

run()メソッド 実行させたい動作は run()に書く. public void run() { ……… }

スレッドの生成と実行(1/3) Threadクラスを拡張したサブクラスにrun()を記述し,そのサブクラスのインスタンスを生成 public class PingPongThread extends Thread { private String word; //what word to print private int delay; //how long to pause public PingPong(String whatToSay, int delayTime) { word = whatTosay; delay = delayTime; } コンストラクタ

スレッドの生成と実行(2/3) Threadクラスを拡張したサブクラスにrun()を記述 public void run() { try { for (;;) { System.out.print(word + ” ”); Thread.sleep(delay); //wait until next time } } catch (InterruptedException e) { return; //end this thread } } run()メソッド

スレッドの生成と実行(3/3) public static void main(String[] args) { PingPongThread t1 = new PingPongThread(”ping”, 33); PingPongThread t2 = new PingPongThread (”PONG”,100); t1.start(); t2.start(); } } 実行結果 ping PONG ping ping PONG ping ping ping PONG ping …

演習問題 6 スキャンとプリントの機能をもつ複合機3台(M0,M1,M2)およびこれらを利用する3つのプログラム(P0,P1,P2)が図のようにリング上に結合されている並行システムを考える. 複合機はロックを用いて相互排他が実現されているので,1つの複合機に同時に複数のプログラムがアクセスすることはできない. 各プログラムはいずれも隣接した1つの複合機から画像をスキャンし,もう1つの隣接した複合機にそれをプリントするものである. ただし,各プログラムが複合機にアクセスする順序が異なり,P0,P1,P2はそれぞれ,M0,M1,M2から画像をスキャンし,M1,M2,M0にプリントする. このシステムの問題点を説明し,その解決策について考察しなさい. P2 M2 M0 P0 P1 M1