簡単な歴史
初期のコンピューターにはオペレーティング システムが含まれておらず、最初から最後まで 1 つのプログラムのみが実行され、このプログラムはコンピューターのすべてのリソースにアクセスできました。コンピューターの発展とオペレーティング システムの登場により、コンピューターは複数のプログラムを同時に実行できるようになり、各プログラムは別個のプロセスで実行されます。どうしてそれをするの?主に次の理由に基づいています:
2. 公平性 異なるユーザーとプログラムは、コンピュータを使用する同じ権利を持ちます。各プログラムは、前のプログラムの実行が完了するのを待ってから次のプログラムを開始するのではなく、タイム スライスを通じてリソースを共有します。
3.利便性各プログラムは独立して実行され、必要に応じて相互に通信するため、1 つのプログラムですべてのタスクを完了するよりも実装が簡単です。
コンピューターはシングルタスクからマルチタスクに進化したため、プログラムも従来のシリアル プログラムから同時実行プログラムに自然に進化することができます。
シリアルプログラムの利点は、シンプルで直感的であることです。しかし、スレッドの出現を促した上記の3つの理由によるものでもあります。上記のコンピューターは、別々のプロセスでプログラムを実行でき、 スレッドにより、同じプロセス内に複数のプログラム制御フローが存在できます。 プログラムの複数のスレッドを複数の CPU で同時に実行するようにスケジュールすることもできます。これは、コンピュータが複数のプログラム(プロセス)を同時に実行し、プログラムが複数のスレッドを同時に実行することに相当します。つまり、プロセス内でスレッドを実行します。
スレッドは軽量プロセスとも呼ばれます。現在のオペレーティング システムは、スレッドを基本単位としてスケジュールされています。リソースはスレッド間で共有されるため、明確な同期メカニズムがないと、スレッド間の実行の乱れ、データのエラーや障害、例外が発生します。多くの場合、これが同時プログラミングの難しさです。
私の観点からすると、いわゆる並行プログラミングとはスレッドの使用です。スレッドは多くの非同期ワークフローをシリアル ワークフローに変換できます。並行プログラミングは、非同期状況での同期を実現してニーズを満たすようにすることです。
では、スレッドのメリットとリスクは何でしょうか?
スレッドの利点
スレッドは、プログラムの開発とメンテナンスのコストを効果的に削減し、パフォーマンスを向上させることができます。コードの複雑さを軽減し、人間の作業方法をより適切にシミュレートします。
メリット 2. モデリングの難しさを軽減します。複数のことを行うよりも、常に同じことを行う方が簡単です。スレッドを使用してプログラム タスクを調整し、複数のタスクを複数のスレッドに割り当てます。各スレッドには 1 つのタスクがあり、必要に応じて相互に通信します。タスクを前後に切り替えるよりもコストがかかりません。
メリット 3. 非同期イベント処理を簡素化する 応答を待つリクエストが発行された場合、プログラム全体が待機する必要がありますか?これは、他のすべてのリクエストが停止されることを意味します。チャットと同じように、次の文を言う前に相手が応答しなければなりません。これは明らかに不合理です。各リクエストがスレッドによって処理される場合、スレッドは独立しており、相互に影響を及ぼさないため、問題は解決されます。もちろん、チャットで返信するときに相手が何を言ったかを知る必要がある場合は、スレッドの安全性に注意してください。
利点 4. ユーザー インターフェイスの応答性が向上 従来の GUI プログラムはシングルスレッドであり、ユーザー イベントの 1 つの処理に時間がかかりすぎると、プログラム全体が停止し、ユーザー エクスペリエンスが低下します。時間のかかる操作が別のスレッドに割り当てられている場合でも、他のイベントは引き続きそのスレッドによって処理されるため、ユーザー インターフェイスがスムーズになります。
スレッドのリスク
スレッドのサポートは諸刃の剣であり、並行プログラムの開発はプログラマーにとってより高いレベルの要件ももたらします。
リスク2。 活力の問題 活力の定義は、「正しいことが確実に起こること」です。単一スレッド内の無限ループは活性の問題です。スレッド A がスレッド B が保持するリソースを解放するのを待ち、スレッド B がリソースを解放しなかった場合、スレッド A は永久に待機することになります。これはアクティビティの問題です。
リスク 3. パフォーマンスの問題 パフォーマンスとは、「正しいことができるだけ早く起こること」です。適切な同時実行設計はパフォーマンスを向上させますが、その逆も結局のところ、スレッドの開始によってリソースを消費します。
セキュリティに関する良い例があります:
value++;
この 1 行のコードだけでは、シングルスレッドのプログラムではまったく問題ありませんが、マルチスレッドのプログラムでは予期せぬ結果が発生する可能性があります。
このコード行を実行するには 3 つのステップがあります: 1. 値を読み取る; 2. 値を 1 加算する; 3. 加算した値を 1 だけ value に代入します。この期間中、プログラムは複数のスレッドによって交互に実行される可能性があり、2 つのスレッドが同時に値を読み取り、同じ値を取得し、それに同時に 1 を加算すると、異なるスレッドが同じ値を取得することになります。 。そして、この値が 2 回追加されることが期待されます。
すべての Java プログラムはスレッドを使用します。プログラム内で明示的にスレッドを作成しない場合でも、使用するフレームワークはスレッドを作成します。これらのスレッドはスレッドセーフである必要があります。
以上がJAVAの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
