I.はじめに
ウィキペディアから次の参照
1.スレッドとプロセスの概要:
-
処理する
1つまたは複数のスレッドを含むオペレーティングシステムによって割り当てられたメモリ空間を含むプロセス。別のスレッドが存在しないことができ、それはプロセスの一部でなければなりません。プロセスは、非デーモンスレッドの全てが完成し実行している後までに終了し、実行されています。 -
スレッド
もLWP(ライトウェイトプロセス)として知られています。オペレーティングシステムは、スケジューリングの最小単位を算出することができます。ほとんどの場合、それは、プロセスの単位プロセスの実際の動作が含まれます。スレッドは、プロセスシーケンスの単一の制御フローを参照して、プロセスは、並行して、各スレッドは、異なるタスクを実行するために、複数のスレッドによって複雑にすることができます。マルチスレッドとして知られている自身の間で交互に実行、。 -
マルチスレッド
マルチスレッド(英語:マルチスレッド)は、ソフトウェアまたはハードウェアから複数のスレッド技術の同時実行を実現することを意味します。マルチスレッドは、CPUをフルに活用を達成するための効率的なプログラムを書くためにプログラマーを満たすことができます。 -
ハードウェアインフラ:
によるハードウェアサポートのマルチスレッド機能を備えたコンピュータと、同時に複数のスレッドを実行することができ、それによって全体の処理性能を向上させます。この能力を持つシステムが対称型マルチプロセッサ、マルチコアプロセッサおよびマルチプロセッシングチップレベル(マルチスレッドチップレベル)、又は同時マルチスレッディング(同時マルチスレッディング)プロセッサを含みます。 -
マルチスレッドソフトウェア:
プロセッサはスレッドだけを実行することができる場合であっても、オペレーティングシステムはまた、小規模の時間間隔が異なるため、スレッド間のフラッシュで切り替えることができます同時に錯覚を複数のスレッドを実行するためのユーザーを作成するには。このようなプログラムは、メカニズムは、マルチスレッド化ソフトウェアと呼ばれて実行されています。このようなMicrosoft WindowsおよびLinuxオペレーティングシステムのような単一のマルチタスクオペレーティングシステムとして知られて前後に切り替え、様々な異なるスレッド、の間です。DOSオペレーティングシステムは、そのような単語が単一人シングルタスクシステムとして処理すべき作業に一つずつ、扱うことができるインターフェース。
2.マルチプロセスオペレーティング・システム
Windowsは、例えば、プログラムを実行していないデスクトップ上でクリックするグラフィカル・インターフェース・オペレーティングシステムは、それが唯一のクリックの処理後に実行され、プロセスと呼ばれることができない、プロセスがタスクマネージャに表示するために実行されます
シングルコアCPUは、任意の時点でプロセスを実行することができます。そして、あなたが最も基本的なハードウェア要件であるマルチコアCPUに必要な、同時に複数のプロセスを実行するために、本当の意味を実現します。
マルチプロセス、それを操作する方法をシングルコアCPU?
私たちは今のWindows実行するとしQQ,Chrome,IDEA
、以下のようにして他のアプリケーションを、そしてCUPが実行されます。
例えば:;、CPUはコードの100行よりも、より多くのクロムを実行するためにポーズを入力し、実行QQにコードの100行を実行するCPUは、次にポーズを入力するCPUは、次にポーズにIDEAにコードの100行を実行する:次にバックQQには継続します??????サイクル-も雨を反映したCPUを下ります!
異なるプロセス間の高速スイッチングを通るため、このオペレーティングシステム、CPUの実行速度が非常に速いため、CPUが順次同時に実行しているユーザプロセスの複数の錯覚を作成達成するために、各プログラムサイクルを実行します。
そうする際、実際には、微視的観点からシリアルスレッドまたはを観察したが、ビューのマクロ観点から、全体が並列に行われる
、すなわち:平行マクロ、ミクロシリアル;
3.マルチスレッドプログラム
プロセスは、彼らは関係が含まれ、複数のスレッドで構成され、あなたは、コードの1000行を実行する必要があり、そのようなプログラム起動や実行中のスレッドがCPUをスケジュールの最小単位であるので、コードのCPUは、実行するには、これらの複数のスレッドに与えられる必要がありますこれらのスレッドが終了したとき、我々は、プロセスが終了する従います。
全体のマルチプロセスの実現を想起:
在执行多进程的时候(执行QQ,Chrome,IDEA
等应用程序),前文叙述是依次执行一些代码,循环执行,事实上是,CPU会将每个进程的任务分配给多个线程,(如若QQ,Chrome,IDEA
等三个进程分别包含5个线程),然后QQ执行该进程里的第一个线程,执行完毕后开始执行Chrome的第一个进程,其次执行IDEA的第一个进程,然后回到QQ看是执行它的第二个进程······循环往复~ 当这些线程执行完毕之后,那么我们的进程也就随之执行完毕。
4.JVM(Java虚拟机)
类似地, Java虚拟机是一个进程,当默认中包含主线程(Main),可通过代码创建多个独立进程,与Main并发执行。这就是程序员需要做的——多线程编程。
二、线程的组成
1.线程的组成:
- CPU时间片:操作系统会为每个线程分配执行时间(执行的线程对象和执行的时间都是随机的)
- 运行数据:
堆空间:存储线程需使用的对象,多线程可以共享堆中的对象。
栈空间:存储线程需使用的局部变量,每个线程都拥有独立的栈。 - 线程逻辑代码:程序员需要写相应的逻辑代码让CPU执行。
- 堆:
堆中是用来存放对象的,一个Java程序拥有一个堆,堆对于多个线程来说是可共享的;- 栈:
栈里面存的是栈帧结构,对应的是一个方法,每个方法里面会有局部变量,仅供本方法使用,因此栈也称之为线程私有空间;所有的线程都会拥有自己的栈;即:堆空间共享,栈空间独立
2.堆和栈与JVM的关系
关于Java中JVM的内存分析,详细:面向对象的内存分析