1. Java 同時実行性/マルチスレッドの概要

黄舟
リリース: 2017-02-28 10:08:43
オリジナル
1135 人が閲覧しました

コンピューターに CPU が 1 つしかなく、一度に 1 つのプログラムしか処理できなかった時代を思い出してください。その後、マルチタスクが登場し、コンピューターが同時に複数のプログラムを処理できるようになりました。実際には「同時に」ではありませんが。単一の CPU がプログラム間で共有されます。オペレーティング システムは実行中のプログラムを切り替え、切り替える前にいずれかのプログラムをしばらく実行します。

マルチタスクの出現により、ソフトウェア開発者にとっては新たな課題となっています。プログラムは、すべての CPU が常に利用可能であること、またはすべてのメモリやその他のコンピューター リソースが利用可能であることを前提とすることはできません。優れたプログラムは、使用しなくなったリソースをすべて解放し、他のプログラムが使用できるようにする必要があります。

その後、マルチスレッドが登場しました。これは、同じプログラム内で複数のスレッドを実行できることを意味します。スレッドは、プログラムを実行する CPU と考えることができます。同じプログラムで複数のスレッドを実行すると、複数の CPU で同じプログラムを実行するようなものになります。

マルチスレッドは、一部の種類のプログラムのパフォーマンスを向上させる優れた方法です。ただし、マルチスレッドはマルチタスクよりもさらに困難です。このスレッドは同じプログラム内で実行され、同じメモリの読み取りと書き込みを同時に行っています。これにより、単一スレッドでは見られないエラーが発生する可能性があります。 2 つのスレッドが同時に実行されることはないため、これらのエラーの一部はシングル CPU マシンでは発生しない可能性があります。最近のコンピューターはすべてマルチコア CPU を搭載しており、CPU の種類も複数あります。これは、別々のコアまたは CPU によって別々のスレッドを同時に実行できることを意味します。


あるスレッドがメモリユニットを読み取り、別のスレッドがそれに書き込む場合、最初のスレッドは最終的にどの値を読み取ることになりますか?この古いものには価値がありますか?それとも 2 番目のスレッドによって書き込まれた値でしょうか?それとも、この 2 つのハイブリッドの価値でしょうか?あるいは、2 つのスレッドが同じメモリ位置に同時に書き込みを行った場合、終了時にどのような値が残るでしょうか?最初のスレッドによって書き込まれた値?値は 2 番目のスレッド経由で書き込まれますか?それとも混合値ですか?

適切な保護策がなければ、これらの出力はいずれも発生する可能性があります。この動作は予測不可能ですらあります。この出力はいつでも変更される可能性があります。したがって、開発者としては、適切な保護手段の使用方法を知ることが重要です。これは、スレッドがメモリ、ファイル、データベースなどの共有リソースにアクセスする方法を制御する方法を学ぶことを意味します。これは、この Java 同時実行性チュートリアルのトピックの 1 つです。

Java のマルチスレッドと同時実行

Java は、マルチスレッドを開発者にとってシンプルで使いやすいものにした最初の言語です。 Java には最初からマルチスレッド機能がありました。したがって、Java 開発者は上記の問題に直面することがよくあります。これが、私が Java 同時実行性に関する一連の記事を書いた理由です。私と同じように、Java 開発者仲間なら誰でもおそらく恩恵を受けるでしょう。

このシリーズでは主に Java マルチスレッドについて説明しますが、マルチスレッドで発生する問題の一部は、マルチタスク システムや分散システムで発生する問題の一部と似ています。このシリーズでは、マルチタスクおよび分散システムについても言及する場合があります。したがって、「同時実行性」という言葉はマルチスレッドのみを意味するものではありません。

2015 年の Java 同時実行性と将来

最初の Java 同時実行に関する本が書かれて以来、そして Java 5 同時実行ツールが出版されて以来、Java 同時実行フレームワークと設計の世界では多くのことが起こりました。

Vert.x、Play/Akka、Qbit などの新しい非同期「シェアードナッシング」プラットフォームと API が登場しました。これらのプラットフォームは、スレッド、共有メモリ、ロックの標準 Java 同時実行モデルとは異なる同時実行モデルを使用します。新しいノンブロッキング同時実行アルゴリズムがリリースされ、LMAX Disrupter などの新しいノンブロッキング同時実行ツールがツールキットに追加されました。

これらの新しい開発に伴い、Java 同時実行チュートリアルを更新する時期が来ました。したがって、このチュートリアルは再度改訂中です。新しいチュートリアルは、作成する時間があればいつでもリリースされます。

上記は 1. Java 同時実行性/マルチスレッドの紹介です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。


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