同時並列
1、同時
これは、中に2つの以上のイベントを指し期間が同じ時間内で発生しました。
2、パラレル
2つ以上のイベントを意味すると同時に(同時に)生じます。
オペレーティングシステムでは、複数のプログラムのインストールは、同時に複数のプログラムは、マクロで実行されている期間、単一CPUシステム顕微鏡、各時間は唯一のプログラムの実行、すなわちプログラムを指します時間が交互に実行され、ちょうど時間インターリーブ時間が非常に短い実行されているので、それがあり、同時に実行印象を与えます。
マルチCPUシステムでは、これらのプログラムは、プログラムを処理するために、各プロセッサと、すなわち、タスクの並行複数のプロセッサ(CPU)に割り当てることができ、多並列実行を実行することができる複数のように、同時に実行することができプログラムを同時に実行することができます。
マルチコアCPU、マルチコアプロセッサであり、複数のコア、より多くの並列処理プログラムのために、大幅にコンピュータ操作の効率を向上させることができます。
注意:コンピュータは、シングルコアプロセッサはシングルで、並列にのみ複数のタスクを複数のタスクを処理することはできませんでなければならないCPUの同時並行で実行されます。同様に、スレッドは、スレッドが並列に実行されて理解するビューのマクロ点から、同じであるが、微視的観点から分析はそれがシリアル動作、システムは唯一のものであるときに実行するスレッドであるスレッドであるCPU 、スレッド特定の順序で複数のスレッドを実行し、我々はこのような状況が呼び出される呼び出し スレッドのスケジューリング。
第二に、スレッドとプロセス
プロセスは:;プログラム実行処理はまた、アプリケーションは同時に複数のプロセスを実行することができ、各プロセスは、別々のメモリ空間を有し、メモリ内で実行されるアプリケーションを指すシステム操作手順の基本単位であるシステム。プロセスの終焉に実行し、プロセスから作成されたプログラムを実行します。
スレッド:スレッドがある処理実行部現在のプロセスにおけるプログラムの実施を担当する、工程、少なくとも一つのスレッド。プロセスは複数のスレッドを持つことができ、アプリケーションは、マルチスレッドプログラムを呼び出すことができます。
概要:少なくとも1つのプログラムが実行されている後に、プロセスは複数のスレッドを含めることができるプロセスがあります。
タスクマネージャ経由ビュープロセス:
スレッド:
スレッドのスケジューリング:
-
- タイムシェアスケジューリング
すべてのスレッドは、各スレッドCPU割り当て、CPUを使用する権利を使用して平均時間を交代します。
-
- プリエンプティブスケジューリング
優先度の高いスレッドを優先使用するCPUを同一のスレッドの優先順位は、次にランダムに選択する場合、(スレッドランダム性)、ジャワプリエンプティブなスケジューリングを使用するため
-
-
- 優先度のスレッド
- 優先度のスレッド
-
-
-
- 詳細プリエンプティブスケジューリング
-
ほとんどのオペレーティングシステムは、実行中の複数の並行プロセスをサポートし、現在ではほとんどすべてのオペレーティングシステムを同時に実行する複数のプログラムをサポートしています。例えば、複数のソフトウェアを実行することができ、コンピュータの電源をオンにします。。この時点で、これらのプログラムは、同時に実行されている「ソフトウェアが同時に実行されているかのように感じます。」
実際には、CPU(中央処理装置)と、複数のスレッド間の高速スイッチングのためのプリエンプティブ・スケジューリング・モード。以下のためにCPU ながら核の用語は、いくつかの点で、唯一、一つのスレッドを実行できるCPUは、スイッチング速度の間に複数のスレッドである私たちの感覚に比較的高速であり、それは同時にランのように見えました。実際には、マルチスレッドプログラムでは、プログラムの動作速度を改善しませんが、そのようにプログラムは、運用効率を向上させることができ、CPUの使用率が高いです。
マルチスレッドのメリット:高効率①は②複数のスレッドの中には影響しません
第三に、メインスレッド
メインスレッドのプライマリ(主要)のスレッドの実行方法:
シングルスレッドプログラム:Javaプログラムは、1つのスレッドのみ、実行は上から下へ実行のmainメソッドから始まります
第三に、スレッドを作成
1、方法を作成
Javaはjava.lang.Threadのクラスがスレッドを表し、すべてのスレッドオブジェクトは、Threadクラスまたはサブクラスのインスタンスでなければなりません使用しています。
各スレッドの役割は、特定のタスクが実際に実行のための期間であり、プログラムのコードストリームを実行して完了することにあります。Javaは、このプログラムの流れを表現するために、実行のスレッドを使用しています。
よるJavaの継承Threadクラスにするの作成とマルチスレッド起動手順は次のとおりです。
① 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把
run()方法称为线程执行体。
② 创建Thread子类的实例,即创建了线程对象
③ 调用线程对象的 start() 方法来启动该线程
void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
结果是两个线程并发地运行;当前线程(main线程)和另一个线程(创建的新线程,执行其 run 方法)。
多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
java程序属于抢占式调度,哪个线程的优先级高,那个线程优先执行;同一个优先级,随机选择一个执行。
Demo:
1 // 自定义线程类 2 public class MyThread extends Thread { 3 //定义指定线程名称的构造方法 4 public MyThread(String name) { 5 //调用父类的String参数的构造方法,指定线程的名称 6 super(name); 7 } 8 /** 9 * 重写run方法,完成该线程执行的逻辑 10 */ 11 @Override 12 public void run() { 13 for (int i = 0; i < 10; i++) { 14 System.out.println(getName()+":正在执行!"+i); 15 } 16 } 17 } 18 // 测试类 19 public class Demo01 { 20 public static void main(String[] args) { 21 //创建自定义线程对象 22 MyThread mt = new MyThread("新的线程!"); 23 //开启新线程 24 mt.start(); 25 //在主方法中执行for循环 26 for (int i = 0; i < 10; i++) { 27 System.out.println("main线程!"+i); 28 } 29 } 30 }