従来の同期モードFPMとSwooleのコルーチン比較

配列が再生されないPHPの配列6の本質である場合には、PHPとみなすことはできません。つまり、Swooleと同様の理由のコルーチンであるブラインド使用されているSwooleとコルーチン行く、理解していません。

 

 

 

まず、Swooleは、コマンドライン(CLI)モードから実行することができますので、我々は代わりに、コマンドラインを使用して開発し、デバッグしている  php-fpm/apache というように。

Swooleでは、我々は使用することができます`\Swoole\Coroutine::create()`コルーチンを作成するために、またはあなたが速記``)(行くを使用することができます。

知人Swooleコルーチン

go(function(){

    go(function(){

        echo 0, PHP_EOL;

    });

    echo 1, PHP_EOL;

});

go(function(){

    echo 2, PHP_EOL;

});

go(function(){

    echo 3, PHP_EOL;

});

結果:

0

1

2

3

Swoole同期パターンは、コルーチンと比較されます

私たちは、Swooleは、I / Oインテンシブなシーンに適しコルーチン、同じハードウェア構成の環境では、それは従来の同期モードよりも多くのトラフィックを運ぶでしょうと言ってきました。

我々は、ファイルの読み込みと書き込み、I / O集中型のシーンに属しネットワーク通信要求(MySQLの、のRedis、HTTP、など)に精通しています。

SQLクエリは、従来の同期モードでは、100ミリ秒であると仮定すると、この時点での現在のプロセス100msのは、他の操作を行うことはできません。あなたはこのSQL 10回を実行している場合は、1秒以上費やす必要があるかもしれません。

そして、コルーチンの間であれば、異なるコルーチンが順次実行されるが、前待機100msのは、CPUが他の操作のコルーチンを実行するために、底を送出しません。つまり、最初のクエリが結果を返さないことがあり、いくつかのその他のお問い合わせは、MySQLに送信されたとして実施されています。それぞれ10コルーチン、SQLの実行これを有効にした場合、あなただけ完了するために、100 +ミリ秒を費やす必要があるかもしれません。

次のようにテストコードがあります:

Swoole\Runtime::enableCoroutine(); // 开启一键协程化

  

function work()

{

    $pdo = new \PDO('mysql:host=127.0.0.1;dbname=db_test', 'root', 'root');

    $pdo->exec('select SLEEP(0.1)'); // 模拟sql需要执行 100ms 的情况

}

$time = microtime(true);

for($i = 0; $i < 10; ++$i)

{

    work();

}

echo 'time: ', (microtime(true) - $time), 's', PHP_EOL;

$time = microtime(true);

for($i = 0; $i < 10; ++$i)

{

    go('work');

}

swoole_event_wait(); // 等待所有协程执行完

echo 'time: ', (microtime(true) - $time), 's', PHP_EOL;

結果:

time: 1.0326268672943s

time: 0.10734605789185s

上記のコードは、単一プロセス10に要求するために必要な処理時間を想定することができます。各要求は、100msのは、SQL文を実行する必要がかかります。

約1sのかかる同期モードは、FPMです。図から分かるように、待っている100msのは、何もすることはできませんが。

コルーチンモデルは、コストは0.1秒Swooleについてです。この待っている100msのはコルーチンをハングアップ時には、最低のスケジューリングは、CPUが他の操作のコルーチンを実行することができます。

上記の同期パターンの詳細は、従来のFPM Swooleコルーチンと比較されます

私は含めて、いくつかの情報をまとめたヘルプ皆、多くのPHPer常により多くのビジネスコードに方向音痴を書きません、私は上昇を開始する場所を知らない、高度な時間にいくつかの問題やボトルネックが発生し、に希望上記これらに限定されない:分散アーキテクチャ、拡張性の高い、高性能、高同時実行、サーバーのパフォーマンスチューニング、TP6、laravel、YII2、Redisの 、Swoole、Swoft、カフカ、MySQLの最適化、シェルスクリプト、ドッカー、マイクロサービス、nginxの、など高度な乾燥品のために必要な、より高度な知識が共有に皆のための自由であることができ、私は公式のグループに参加する必要があり、こちらをクリックしてください

推奨読書:

Yaezakura:違いSwooleのコルーチンのコルーチンで行く、非常に詳細な、非常に高速なハードウェア

おすすめ

転載: www.cnblogs.com/a609251438/p/12078363.html