JAVAの簡単な紹介

怪我咯
リリース: 2017-06-23 13:52:06
オリジナル
1336 人が閲覧しました

簡単な歴史

初期のコンピューターにはオペレーティング システムが含まれておらず、最初から最後まで 1 つのプログラムのみが実行され、このプログラムはコンピューターのすべてのリソースにアクセスできました。コンピューターの発展とオペレーティング システムの登場により、コンピューターは複数のプログラムを同時に実行できるようになり、各プログラムは別個のプロセスで実行されます。どうしてそれをするの?主に次の理由に基づいています:

1.リソース使用率 プログラムの待機中にコンピューターは別のプログラムを実行でき、同じリソースを異なるプログラムで使用できるため、間違いなくリソース使用率が向上します。
2. 公平性 異なるユーザーとプログラムは、コンピュータを使用する同じ権利を持ちます。各プログラムは、前のプログラムの実行が完了するのを待ってから次のプログラムを開始するのではなく、タイム スライスを通じてリソースを共有します。
3.利便性各プログラムは独立して実行され、必要に応じて相互に通信するため、1 つのプログラムですべてのタスクを完了するよりも実装が簡単です。

コンピューターはシングルタスクからマルチタスクに進化したため、プログラムも従来のシリアル プログラムから同時実行プログラムに自然に進化することができます。

シリアルプログラムの利点は、シンプルで直感的であることです。しかし、スレッドの出現を促した上記の3つの理由によるものでもあります。上記のコンピューターは、別々のプロセスでプログラムを実行でき、 スレッドにより、同じプロセス内に複数のプログラム制御フローが存在できます。 プログラムの複数のスレッドを複数の CPU で同時に実行するようにスケジュールすることもできます。これは、コンピュータが複数のプログラム(プロセス)を同時に実行し、プログラムが複数のスレッドを同時に実行することに相当します。つまり、プロセス内でスレッドを実行します。

スレッドは軽量プロセスとも呼ばれます。現在のオペレーティング システムは、スレッドを基本単位としてスケジュールされています。リソースはスレッド間で共有されるため、明確な同期メカニズムがないと、スレッド間の実行の乱れ、データのエラーや障害、例外が発生します。多くの場合、これが同時プログラミングの難しさです。

私の観点からすると、いわゆる並行プログラミングとはスレッドの使用です。スレッドは多くの非同期ワークフローをシリアル ワークフローに変換できます。並行プログラミングは、非同期状況での同期を実現してニーズを満たすようにすることです。

では、スレッドのメリットとリスクは何でしょうか?

スレッドの利点

スレッドは、プログラムの開発とメンテナンスのコストを効果的に削減し、パフォーマンスを向上させることができます。コードの複雑さを軽減し、人間の作業方法をより適切にシミュレートします。

利点 1. マルチプロセッサの強力な機能を最大限に活用できるようになり、マルチプロセッサ システムはますます完璧になり、スレッドの役割が特に明確になってきています。特に I/O 操作中に、複数のプロセッサーによって異なるスレッドを同時にスケジュールできるため、プログラムの待機時間が短縮され、プログラムの実行効率が向上し、システムのスループットが向上します。
メリット 2. モデリングの難しさを軽減します。複数のことを行うよりも、常に同じことを行う方が簡単です。スレッドを使用してプログラム タスクを調整し、複数のタスクを複数のスレッドに割り当てます。各スレッドには 1 つのタスクがあり、必要に応じて相互に通信します。タスクを前後に切り替えるよりもコストがかかりません。
メリット 3. 非同期イベント処理を簡素化する 応答を待つリクエストが発行された場合、プログラム全体が待機する必要がありますか?これは、他のすべてのリクエストが停止されることを意味します。チャットと同じように、次の文を言う前に相手が応答しなければなりません。これは明らかに不合理です。各リクエストがスレッドによって処理される場合、スレッドは独立しており、相互に影響を及ぼさないため、問題は解決されます。もちろん、チャットで返信するときに相手が何を言ったかを知る必要がある場合は、スレッドの安全性に注意してください。
利点 4. ユーザー インターフェイスの応答性が向上 従来の GUI プログラムはシングルスレッドであり、ユーザー イベントの 1 つの処理に時間がかかりすぎると、プログラム全体が停止し、ユーザー エクスペリエンスが低下します。時間のかかる操作が別のスレッドに割り当てられている場合でも、他のイベントは引き続きそのスレッドによって処理されるため、ユーザー インターフェイスがスムーズになります。

スレッドのリスク

スレッドのサポートは諸刃の剣であり、並行プログラムの開発はプログラマーにとってより高いレベルの要件ももたらします。

リスク 1。セキュリティの問題 同時プログラミングでは、シングルスレッド プログラムでは発生しないエラーが発生する可能性があります。
リスク2。 活力の問題 活力の定義は、「正しいことが確実に起こること」です。単一スレッド内の無限ループは活性の問題です。スレッド A がスレッド B が保持するリソースを解放するのを待ち、スレッド B がリソースを解放しなかった場合、スレッド A は永久に待機することになります。これはアクティビティの問題です。
リスク 3. パフォーマンスの問題 パフォーマンスとは、「正しいことができるだけ早く起こること」です。適切な同時実行設計はパフォーマンスを向上させますが、その逆も結局のところ、スレッドの開始によってリソースを消費します。

セキュリティに関する良い例があります:

value++;
ログイン後にコピー

この 1 行のコードだけでは、シングルスレッドのプログラムではまったく問題ありませんが、マルチスレッドのプログラムでは予期せぬ結果が発生する可能性があります。

このコード行を実行するには 3 つのステップがあります: 1. 値を読み取る; 2. 値を 1 加算する; 3. 加算した値を 1 だけ value に代入します。この期間中、プログラムは複数のスレッドによって交互に実行される可能性があり、2 つのスレッドが同時に値を読み取り、同じ値を取得し、それに同時に 1 を加算すると、異なるスレッドが同じ値を取得することになります。 。そして、この値が 2 回追加されることが期待されます。

すべての Java プログラムはスレッドを使用します。プログラム内で明示的にスレッドを作成しない場合でも、使用するフレームワークはスレッドを作成します。これらのスレッドはスレッドセーフである必要があります。

以上がJAVAの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート