昨日、元同僚とチャットしていて、PHP と Swoole について不満を言いました。彼は、PHP には落とし穴がたくさんあり、PHP には大きな制限があると信じていました。 PHP+Swoole は同時実行性の高いサーバーには適していません。C+Swoole が最適なソリューションです。 C++ にはさまざまなデータ構造があり、C++ はスレッドを開くことができ、C++ はオブジェクトを共有できます。丁寧に説明する必要がありそうです。
C/C++ や Java と比べて PHP に欠けているものは何ですか?マルチスレッド、マルチスレッド、マルチスレッド…
はい。 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++ が必要であるとも言いました。効率的とはどういうことかをお話します。優れたプログラムを開発するのは簡単な仕事ではなく、プログラマーは多大な時間とエネルギーを投資する必要があります。開発効率の向上の重要性は、単に作業を短時間で完了できるということではなく、残りの時間で単体テストの追加、バグの修正、ユーザー エクスペリエンスの向上、詳細の改善、サポート ツールの提供、パフォーマンスの最適化、キーの追加ができることです。ログを収集し、監視アラームを増やし、災害復旧計画を追加します。
この記事の著者は Swoole の創設者です、原題:「About C++, PHP and Swoole」)
原文: http://rango.swoole.com/archives/473 著者: @汉天峰-Rango