ホームページ  >  記事  >  PHPフレームワーク  >  なぜswooleは睡眠を使用できないのですか?

なぜswooleは睡眠を使用できないのですか?

WBOY
WBOYオリジナル
2022-04-13 15:09:282694ブラウズ

swoole では sleep 関数を使用するとプロセスがスリープブロックに陥るため、スリーププロセスを中断できるのはシグナルのみです swoole のシグナルは signalfd をベースとしているため、シグナルを送信してもスリープを中断することはできませんオペレーティング システムは、指定された時刻まで現在のプロセスを再起動しません。

なぜswooleは睡眠を使用できないのですか?

このチュートリアルの動作環境: Windows 10 システム、Swoole 4 バージョン、DELL G3 コンピューター

swoole がスリープで使用できない理由

In 非同期 IO プログラムでは、sleep/usleep/time_sleep_until/time_nanosleep を使用してはなりません。 (スリープは、すべてのスリープ関数を指すために以下で使用されます)

  • スリープ関数により、プロセスはスリープ ブロッキングに陥ります。指定された時間が経過すると、オペレーティング システムが起動されます。そのときのみ、現在のプロセスが再起動されます。

  • スリープ プロセス中は、シグナルのみが中断できます。

  • Swoole の信号処理は signalfd に基づいて実装されているため、シグナルが送信されても​​スリープを中断することはできません。

  • Swoole が提供する swoole_event_add、swoole_timer_tick、swoole_timer_after、swoole_process::signal、および非同期 swoole_clientプロセスがスリープすると動作を停止します。 swoole_server は新しいリクエストを処理できなくなりました。

インスタンス プログラム

$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(['worker_num' => 1]);
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    sleep(100);
    $serv->send($fd, 'Swoole: '.$data);
});
$serv->start();

スリープ関数が onReceive イベントで実行され、サーバーは 100 秒以内にそれ以上クライアント リクエストを受信できなくなります。 推奨学習:

swoole チュートリアル

以上がなぜswooleは睡眠を使用できないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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