ホームページ >バックエンド開発 >PHPチュートリアル >phpのマルチスレッドとはどういう意味ですか?

phpのマルチスレッドとはどういう意味ですか?

清浅
清浅オリジナル
2019-03-15 14:19:244061ブラウズ

PHP はデフォルトではマルチスレッドをサポートしていません。pthreads 拡張機能をインストールすることで、マルチスレッドをサポートするように PHP をコンパイルするためのスレッドセーフな方法をパラメータに指定させます。ただし、使用中はスレッドセーフを考慮する必要があります。

スレッドは、オペレーティング システムにおける操作スケジュールの最小単位です。これはプロセスに含まれており、プロセス内の実際の操作単位となります。今日私が共有するのは、スレッドの知識は PHP に関連しており、一定の参考価値があるということです。

phpのマルチスレッドとはどういう意味ですか?

#[推奨コース: PHP チュートリアル]

マルチスレッドの理解

いわゆるマルチスレッドは 1 つのプロセス内で複数のスレッドを同時に実行でき、各スレッドは異なるタスクを並行して実行できます。マルチスレッドはプログラムの実行効率を大幅に向上させます。マルチスレッドはシングル スレッドよりもオペレーティング システムによってスケジュールされる可能性が高くなります。そしてより効率的です。マルチコア CPU の複数のコアで複数のスレッドを同時に実行できるため、動作効率が向上します。また、スレッド間の通信もより簡単になります。

PHP マルチスレッド

デフォルトでは、PHP はマルチスレッドをサポートしていません。マルチスレッドを使用するには、拡張機能をインストールする必要があります。現在、一般的に使用されている拡張機能これには、pcnlt、POSIX、pthreads などがありますが、最も一般的に使用されるのは pthreads 拡張機能です。これは、パラメーターを使用して、マルチスレッドをサポートするように PHP をコンパイルするスレッドセーフな方法を指定します。

スレッドを使用する前に、まずスレッド セーフティの問題を考慮する必要があります。スレッド セーフティとは、関数または関数ライブラリがマルチスレッド環境で呼び出されたときに、複数のスレッド間で共有変数を正しく処理できる機能を指します。プログラムの機能が正しく完了できるようにするためです。

例:

マルチスレッドで共有変数が存在するため、次のような問題が発生する可能性があります:

存在一个全局数组:$arr = array('a');
A 线程获取数组长度为1;
B 线程获取数组长度为1;
A 线程pop出数组元素 $a = array_pop($arr); $a = 'a';
B 线程也pop数组元素 $b = array_pop($arr); $a = null;
但是此时B线程内就出现了错误事件,虽设置了数组长度大于0,但是没有 pop值来

PHP はスレッド セーフを実現します

PHP は主に TSRM 機構を通じてスレッド セーフを実現します。この機構により、グローバル変数と静的変数を分離し、グローバル変数と静的変数のコピーを作成できます。変数は各スレッドにコピーされます。各スレッドはメインスレッドのバックアップを使用します。これにより、変数の競合が回避され、スレッドの安全性の問題が発生しなくなります。

PHP のマルチスレッドのカプセル化によりスレッドの安全性が保証されるため、開発者は読み取りと書き込みの競合を考慮する必要がなく、コードの安全性も高まります。ただし、これには欠点もあります。たとえば、サブスレッドが実行を開始すると、メインスレッドはサブスレッドの実行の詳細を調整できなくなり、メッセージを渡す機能を失います。概要: この記事は以上です。皆さんのお役に立てれば幸いです。

以上がphpのマルチスレッドとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。