バージョン 4.0 以降、Swoole は完全なコルーチン (Coroutine) チャネル (Channel) 機能を提供し、新しい CSP プログラミング モデルをもたらします。
アプリケーション層は完全同期プログラミングを使用でき、最下位層は非同期 IO を自動的に実装します。 (推奨される学習: swoole ビデオ チュートリアル )
go(function () { $redis = new Swoole\Coroutine\Redis(); $redis->connect('127.0.0.1', 6379); $val = $redis->get('key'); });
4.0.0 以降のバージョンでは PHP7 のみがサポートされます
バージョン 4.0 以降は削除されました。 1 --enable-coroutine コンパイル オプション、動的構成に変更されました。
Coroutine は、プリエンプションではなく協調を通じて切り替える純粋なユーザー モード スレッドとして理解できます。プロセスやスレッドと比較して、コルーチンのすべての操作はユーザー モードで完了でき、作成コストや切り替えコストが低くなります。
Swoole はリクエストごとに対応するコルーチンを作成し、IO ステータスに応じてコルーチンを合理的にスケジュールできるため、次の利点が得られます:
開発ユーザーは同期を使用できます。意識せずに非同期 IO の効果とパフォーマンスを達成するためのコード記述。従来の非同期コールバックによって引き起こされる個別のコード ロジックを回避し、マルチレイヤー コールバックに閉じ込められて、コードが保守不能になることを回避します。最下位層はコルーチンをカプセル化するため、従来の PHP 層コルーチン フレームワークと比較して、開発者はコルーチン IO 操作を識別するために yield キーワードを使用する必要がないため、コルーチン IO 操作を深く理解する必要はありません。 yield のセマンティクスと各レベルの呼び出し。すべてが yield に変更されるため、開発効率が大幅に向上し、ほとんどの開発者のニーズを満たすことができます。プライベート プロトコルの場合、開発者はコルーチンの TCP または UDP インターフェイスを使用してカプセル化を簡単に行うことができます。
チャット サーバーからブロードキャストを送信したり、Web サーバーから電子メールを送信したりするなど、サーバー プログラムで時間のかかる操作を実行する必要がある場合。これらの関数を直接実行すると、現在のプロセスがブロックされ、サーバーの応答が遅くなります。
Swoole は、現在のリクエストの処理速度に影響を与えることなく、非同期タスクを TaskWorker プロセス プールに配信して実行できる非同期タスク処理の機能を提供します。プログラム コード
最初の TCP サーバーに基づいて、追加する必要があるのは 2 つのイベント コールバック関数 (onTask と onFinish) だけです。また、タスクの処理数を設定する必要がありますが、タスクの消費時間やタスク量に応じて、適切なタスクの処理数を設定できます。 以上がswooleコルーチンと非同期の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。$serv = new swoole_server("127.0.0.1", 9501);
//设置异步任务的工作进程数量
$serv->set(array('task_worker_num' => 4));
$serv->on('receive', function($serv, $fd, $from_id, $data) {
//投递异步任务
$task_id = $serv->task($data);
echo "Dispath AsyncTask: id=$task_id\n";
});
//处理异步任务
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
echo "New AsyncTask[id=$task_id]".PHP_EOL;
//返回任务执行的结果
$serv->finish("$data -> OK");
});
//处理异步任务的结果
$serv->on('finish', function ($serv, $task_id, $data) {
echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});
$serv->start();