並行プログラミングの話題(A) - 同時実行とマルチスレッド

1.同時

並行並列1.1

まず、次のように、並行性と並列性については1つのワードのみものの2を教えて、実際に、それは本質的に異なる、コンセプトは次のとおりです。

  • 並列(パラレル):同時に手段、同時に複数のプロセッサ上で実行される複数の命令。
  • 同時(並行)はマクロで複数のプロセスの同時実行の効果を有するようにモーメントを意味し、一つだけの命令実行が、より迅速な回転処理命令が実行されます。

並行プログラミングの話題(A) - 同時実行とマルチスレッド

オペレーティングシステムでは、複数のプログラムのインストールは、同時に複数のプログラムは、マクロで実行されている期間、単一CPUシステム顕微鏡、各時間は唯一のプログラムの実行、すなわちプログラムを指します時間が交互に実行され、ちょうど時間インターリーブ時間が非常に短い実行されているので、それがあり、同時に実行印象を与えます。

マルチCPUシステムにおいて、これらのプログラムは、プログラムを処理するために、各プロセッサと、すなわち、タスクの並行複数のプロセッサ(CPU)に割り当てることができ、多並列実行を実行することができるので、同時に実行することができ複数のプログラムを同時に実行することができます。彼は、現在のコンピュータ市場のマルチコアCPUは、マルチコアプロセッサは、複数のコアであり、前記、複数の並列処理プログラム、大幅にコンピュータ操作の効率を向上させることができます。
並行プログラミングの話題(A) - 同時実行とマルチスレッド

注意:コンピュータは、シングルコアプロセッサが並列に複数のタスクを処理することはできませんでなければならない、複数のタスクは、単一のCPU上で同時に実行することができます。同様に、スレッドは、スレッドが並列に実行されて理解するビューのマクロ点から、同じであるが、微視的観点から分析はそれがシリアル動作、システムは、1つのCPUだけであるときに実行するスレッドであるスレッド、スレッドです特定の順序で複数のスレッドを実行し、我々はこのような状況は、スレッドのスケジューリングと呼ばれる呼び出します。

1.2シーケンスプログラミングと並行プログラミング

我々はプログラミングの問題を解決すると、通常のプログラムのみを任意の時点で1つのステップを実行することができ、つまり、すべてのものを、順次プログラミングを使用して解決。しかし、特定の問題のために、私たちは、私たちが望む効果を達成するために、プログラムの複数の並列部分を実行することができるように願っています。ユニプロセッサマシンでは、複数のセクションにプログラムすることができ、各セクションは、同時にプロセッサによって実行されます。マルチプロセッサマシンでは、各部分を別々にした後、複数のプロセッサ上で並列に実行される、複数の部分にプログラムすることができます。我々は並行プログラミングの別のプログラミングモデルにに関係することができるように当然のことながら、より完全にCPUリソースを利用するために、我々は、複数のプロセッサ上で同時に実行することができます。並行プログラミングは、マルチスレッドプログラミングと呼ばれます。並行プログラミング私たちのプログラムが実行している別の、独立したタスクの数に分けることができるように。マルチスレッド機構を用いて、各個々のタスクは、スレッドを駆動するであろう。スレッドは、フロー制御の過程における単一のシーケンスである、単一プロセスは、複数の「同時実行」タスクを持つことができます。同じ独自のCPUを持っていると思われる、各タスクプログラムすることができます。しかし、根底にある機構はCPUのクロック周波数を有し、依然としてCPUタイムスライスであり、秒当たりの命令数で表さCPUによって実行することができます。各クロックサイクルでは、本当に唯一可能なCPUはまた、複数の命令を実行します。オペレーティングシステムは、プロセスを管理する順番に各プロセスは、時間の短い期間を割り当て必ずしもそうではない共有し、各プロセス内で、互いに複数のスレッド間の処理スレッドで時間の独自の内部割当を有するプログラムコード契約このスイッチング時間を実行するためのスイッチが非常に短いので、通常、我々はそれを考慮する必要はありません。

同時実行が「脂肪」、ない治療を意味し、最も一般的な状況は、短期間で多くの人が、あなたのサイトをクリックした処理要求を発行しているということです。並行プログラミングは、このプログラムを扱うことができる単一のプロセッサとマルチプロセッサマシン上で、建築やアルゴリズムについてのそれらに対処することができ、同時条件に対応するためです。CPUは、一般的に時分割され、処理効率を向上させる方法、時間の問題、関係なく、プロセスは上に行くだろうどのように多くの同時実行、異なるスレッドまでの時間が非常に短い期間に切り替え保持されません使用される技術に依存します。

1.3並行プログラミングの利点

適切に使用した場合、複雑なアプリケーションのパフォーマンスを向上させながら、スレッドが効果的に、開発やメンテナンスプログラムのコストを削減することができます。具体的には、スレッドの利点があります。

  • 強力なマルチプロセッサ機能を再生する
    今、マルチプロセッサシステムは、ますます人気が高まっている、と価格は減少し続け、リアルタイムにかつ低エンドサーバーは、デスクトップシステムを中断し、また、一般的に複数のプロセッサを採用し、この傾向は、さらに加速しましたクロック周波数を高めることにより、パフォーマンスを向上させるためにすることはますます困難になってきているので、プロセッサメーカーは、単一のチップ上に複数のプロセッサコアを配置するために有効にし始めています。システム上の唯一のシングルスレッドは、プログラムが唯一の100個のプロセッサを搭載したデュアルコアプロセッサシステム上のCPUリソースの半分を使用することができる場合だけ、だと思うリソースの99%を使用することはできません。適切に設計された、マルチスレッドプログラムは、リソースのプロセッサ使用率を増加させることによって、システムのスループットを向上させることができれば、マルチスレッド・プログラムは、複数のプロセッサ上で同時に実行することができます。

    • シングルプロセッサシステム上のより高いスループットが
      プログラムはシングルスレッドである場合、プログラムは、I / O動作が完了すると、プロセッサがアイドル状態になり、同期を待ちます。マルチスレッドプログラムでは、スレッドがI / O操作が完了するために、別のスレッドが実行し続けることができます待機している場合、プログラムはI中に実行し続けることができるように/ Oがブロックされました。

    • モデルのシンプル
      スレッドを使用することによって、それが複雑になることが非同期さらにシンプルかつ同期ワークフローのセットに分解ワークフロー、各ワークフローには、別のスレッドを実行し、特定の同期位置で相互作用します。私たちは、このようなサーブレットやRMIなど既存の枠組み、数を介してこれらの目標を達成することができ、フレームワークは、このような要求管理、スレッドの作成、負荷分散などの詳細のいくつかを解決するための責任があり、かつ適切なタイミングで適切なアプリケーションコンポーネントへの要求。サーブレットの開発者は、Web要求に応答して、サーブレットのサービスメソッドを呼び出すと、同期させることができ、ソケットの入力ストリームまたは出力ストリームがブロックされている知っている必要はありませんが、同時に処理される要求の数を知っている必要はありませ書くためにそれはシングルスレッドのプログラムであるかのように、要求を処理する方法。

    • 簡略化されたプロセスの非同期イベント
      サーバアプリケーションソケット複数のリモートクライアントからの接続要求を受け付けた場合、各スレッドは、各接続と同期に割り当てられている場合、I / O、それはこのような手順の開発を減少させます難易度。アプリケーションは、データが到着していない時にソケットの読み取り操作を実行している場合は、データが到着するまで、その後、読み出し動作がブロックされます。シングルスレッドのアプリケーションでは、これがリクエスト停止処理の過程だけでなく意味するが、このスレッドがブロックされている間に、すべての要求の処理を一時停止することを意味します。この問題を回避するには、シングルスレッドサーバアプリケーションは、ノンブロッキングI / Oを使用する必要がありますが、この私の複雑さは、/ Oが発生しやすい、同期I / O、およびエラーよりもはるかに高いです。ただし、各要求は、自身の処理スレッドを持っているので、要求を処理するときに、ブロッキングが発生した場合、他の要求の処理には影響しません。

      実用的なアプリケーションでは、マルチスレッドは、ブラウザが複数の画像をダウンロードできるようにする必要があり、非常に便利であり、Webサーバは、複数の同時ユーザーの要求に応えることができなければなりません。Java仮想マシン自体がゴミに舞台裏のスーパー糸を提供しますリサイクル、グラフィカル・ユーザ・インタフェース(GUI)アプリケーションは、ユーザインタフェースイベントを収集するホスト環境から別のスレッドを起動する必要が......実際のプログラミングで短い、マルチスレッドアプリケーションでは非常に広いです。

2.プロセスとスレッド

  • プロセス:各プロセスは、別々のメモリ空間を有している、アプリケーションは同時に複数のプロセスを実行することができ、メモリ内で実行中のアプリケーションを指し、プロセスの実行はプログラムであり、プログラムを実行すると、システムの基本的な単位であるシステムプロセスの終焉に実行し、プロセスから作成されたプログラムを実行します。プロセスは、オペレーティングシステムによって管理される基本的な操作部として理解することができます。360ブラウザは、WPSは、プロセス工程である、システムは「.EXE」で実行されている動作は、プロセスとして理解することができます。

並行プログラミングの話題(A) - 同時実行とマルチスレッド

  • 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
    进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很多子任务在运行,比如聊天线程、好友视频线程、下载文件线程等等。
    並行プログラミングの話題(A) - 同時実行とマルチスレッド
    简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程。

    3.多任务、多进程、多线程

    几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程

    3.1 多进程

    实现并发最直接的方式是在操作系统级别使用进程,进程是运行在它自己的地址空间内的自包容的程序。多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程,来实现同时运行多个进程。 尽管对于一个CPU而言,它在某个时间点只能运行一个进程,但CPU可以在多个进程之间进行轮换执行,并且CPU的切换速度极高,使我们无法感知其切换的过程,就好像有多个进程在同时执行。
    几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。一般而言,进程包含如下3个特征。

独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。
动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在进程中加入了时间的概念,进程具有自己的生命周期和各种不同的状态,这些概念在程序中部是不具备的。
并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。

3.2 多线程
3.2.1 多线程概述

多线程则扩展了多进程的概念。使得同一个进程中也可以同时并发处理多个任务。线程(Thread)也被称作轻量级进程(Lightweight Process)。线程是进程的执行单元,就像进程在操作系统中的地位一样,线程在程序中是独立的、并发的执行流。当进程被初始化后,主线程就被创建了。对于绝大多数的应用程序来说,通常仅要求有一个主线程,但也可以在该进程内创建多条顺序执行流,这些顺序执行流就是线程,每个线程也是互相独立的。

线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。因为多个线程共享父进程里的全部资源,因此编程更加方便;但必须更加小心,我们必须确保线程不会妨碍同一进程里的其他线程。

3.2.2 多线程机制

プログラミングモデルをスレッドすることは、同時に絡み合って単一のプログラムで複数の業務の取り扱いを簡素化し、利便性をもたらします。スレッドを使用する場合、CPUは、順番にそれを割り当てます各タスクに時間がかかります。各タスクは、占有CPUで感じてきたが、実際にはCPU時間がすべてのタスクに割り当てられたセグメントに分割されます。一つの大きな利点は、そのスレッドあなたはつまり、コードは、1つまたは複数のCPUを持つマシン上で実行されていることを知っている必要はありません、このレベルから撤退することができます。そのため、スレッドを使用すると、プログラム行が遅すぎる、マシンとしてCPUを追加することが簡単に速くプログラムを実行することができれば、プログラムのために透明、スケーラブルな方法を確立するためのメカニズムです。マルチタスクとマルチスレッドマルチプロセッサ・システムは、多くの場合、最も合理的な方法を使用します。

3.2.3マルチスレッド・スケジューリング

スレッドは、特定のタスクを完了することができます、あなたは共有変数親プロセスの一部と環境と他のスレッド、タスクを完了するためのプロセスを完了するために、お互いに相乗効果を共有することができます。スレッドを実行スレッドには、それがプロセス内の他のスレッドがあるかどうかわからない、独立して実行され、別のスレッドが実行できるように、つまり、現在実行中のスレッドは、いつでも中断することができる、プリエンプティブであります。

スレッドが別のスレッドが同じプロセス内で複数のスレッド間で同時に実行することができ作成および破棄することができます。アプリケーションが作動部の複数の同時実現を持つことができるが、オペレーティング・システムは、マルチスレッド・スケジューリングのために複数の独立したアプリケーションとして見なさ複数のスレッドを必要とするように、論理的な観点からは、マルチスレッドアプリケーション内に存在しますそして、管理と資源配分。プロセス自体の完了を担当するスレッドのスケジューリングと管理。

採掘からカロライナ州ではこれを言うことができます。オペレーティング・システムは、複数のタスクを同時に実行することができ、各タスクはプロセスであり、プロセスは、複数のタスクを同時に実行することができ、各タスクはスレッドです。プログラムは、少なくとも1つのプロセスを実行した後要するに、プロセスで複数のスレッドを含めることができますが、少なくとも一つのスレッドが含まれている必要があります。

おすすめ

転載: blog.51cto.com/13819911/2404176