ホームページ  >  記事  >  バックエンド開発  >  C/C++ や Java と比べて PHP に欠けているものは何ですか?マルチスレッド、マルチスレッド、マルチスレッド…

C/C++ や Java と比べて PHP に欠けているものは何ですか?マルチスレッド、マルチスレッド、マルチスレッド…

伊谢尔伦
伊谢尔伦オリジナル
2016-11-30 11:17:431192ブラウズ

昨日、元同僚とチャットしていて、PHP と Swoole について不満を言いました。彼は、PHP には落とし穴がたくさんあり、PHP には大きな制限があると信じていました。 PHP+Swoole は同時実行性の高いサーバーには適していません。C+Swoole が最適なソリューションです。 C++ にはさまざまなデータ構造があり、C++ はスレッドを開くことができ、C++ はオブジェクトを共有できます。丁寧に説明する必要がありそうです。

C/C++ や Java と比べて HP に欠けているものは何ですか?マルチスレッド、マルチスレッド、マルチスレッド...

はい。 PHP のスレッドは C/C++ や Java よりも少ないです。 PHP にはマルチプロセス ソリューションしかないため、PHP のグローバル変数やオブジェクトは共有されず、データ構造はプロセス間で操作できず、ソケット ファイル記述子も共有できません。では、PHP には制限があるのでしょうか?

マルチスレッドはマルチ処理よりもはるかに強力であるように思えます。実際、マルチスレッドにはより多くの落とし穴があると責任を持って言えます。

データ同期の問題によりクラッシュします。パフォーマンスを犠牲にしてあらゆる場所にロックを追加するか、非常にハードなロックなしの同時プログラミングを使用するか、私の知る限り、このスキルを習得できる人は中国にほとんどいません。

ロックを追加すればすべてがうまくいくとは考えないでください。デッドロックの問題で問題が発生します。プログラムのロジックが複雑になると、ロックの制御がますます難しくなり、一度デッドロックになると、プログラムは基本的に駄目になります。

スレッドがハングすると、すべてのスレッドが終了します

代わりに、複数のプロセスを調べていますが、実際にはこれがはるかに単純です。

プロセス間通信を使用すると、基本的にあらゆるデータ共有を実現できます。たとえば、プロセスは特にデータ構造とオブジェクトを保存するために使用され、他のプロセスのすべてのデータ操作はこのプロセスに配信されます

複数のプロセスはロックを必要としません

複数のプロセスは共有メモリ データ構造を使用して、いくつかのマルチプロセスを実装できます。スレッド関数。例えば、Swooleが提供するTableやAtomicは、非常に低コストでデータ共有を実現できます。共有メモリキューは将来追加される予定です

いわゆるPHPがSwooleを制限するのは完全にナンセンスです。 Swoole が提供する Table、Atomic、SendMessage/PipeMessage、および Task を適切に使用すると、非同期でノンブロッキングのコード ロジックを完全に実装できます。

C++ で書かれたプログラムのパフォーマンスは優れていますか?

これは完全に盲目的な迷信です。C++ には、計算量の多いプログラムにとって利点があります。同時実行サーバーの中核は IO であり、大規模な集中コンピューティングではありません。言語の観点からは、C++ には利点がありません。さらに、C++ のほとんどのデータ構造には、PHP での対応する実装があります。それが不可能な場合でも、特別な拡張機能を自分で作成することで解決できます。

高同時実行サーバーは、マシンあたり 10W の接続を維持でき、1 秒あたり送受信される 3 ~ 5W のメッセージを処理できます。このレベルのパフォーマンスは、BAT のコア システムにすでに適用できます。

開発効率が速いとはどういう意味ですか?

この同僚は、PHP サーバーの開発は C++ よりも早いものの、究極のパフォーマンスを追求するには依然として C++ が必要であるとも言いました。効率的とはどういうことかをお話します。優れたプログラムを開発するのは簡単な仕事ではなく、プログラマーは多大な時間とエネルギーを投資する必要があります。開発効率の向上の重要性は、単に作業を短時間で完了できるということではなく、残りの時間で単体テストの追加、バグの修正、ユーザー エクスペリエンスの向上、詳細の改善、サポート ツールの提供、パフォーマンスの最適化、キーの追加ができることです。ログを収集し、監視アラームを増やし、災害復旧計画を追加します。


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