検索
ホームページPHPフレームワークWorkermanWorkerman で知っておくべきいくつかの概念

次のコラム workerman の使い方チュートリアル では、Workerman について知っておくべきいくつかの概念を紹介します。困っている友人の役に立てば幸いです。

Workerman で知っておくべきいくつかの概念

#Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット サービス フレームワークです。これは MVC フレームワークではなく、より低レベルでより一般的なソケット サービス フレームワークであり、tcp エージェント、ラダー エージェント、ゲーム サーバー、メール サーバー、および ftp サーバーの開発に使用できます。

推奨: Workerman チュートリアル

実際、Workerman は nginx の PHP バージョンに似ており、コアもマルチプロセス Epoll ノンブロッキング IO です。各 Workerman プロセスは数万の同時接続を維持できます。メモリ上に常駐するため、Apache、nginx、php-fpmなどのコンテナに依存せず、超高性能です。

TCP、UDP、UNIXSOCKET、長時間接続、Websocket、HTTP、WSS、HTTPS およびその他の通信プロトコル、およびさまざまなカスタム プロトコルをサポートします。タイマー、非同期ソケット クライアント、非同期 Mysql、非同期 Redis、非同期 HTTP、非同期メッセージ キューなど、多くの高性能コンポーネントが含まれています。

まず、いくつかの核となる概念を理解する必要があります、1. マルチプロセス 2. Epoll 3. ノンブロッキング IO

1. マルチプロセス:

まず、プロセスとは何ですか? プロセスには、プロセスに割り当てられたコード、データ、リソース (メモリ) が含まれます。直感的に言えば、プロセスはコンピュータの PID です。システム。オペレーティング システムは、外部プロセスによる干渉からプロセス空間を保護します。つまり、あるプロセスが別のプロセスのメモリにアクセスすることはできません。

プロセス間で通信する必要がある場合、オペレーティング システムを使用してプロセス間通信メカニズムを提供できます。通常、実行可能ファイルを実行すると、オペレーティング システムはそのファイルを実行するためのプロセスを作成します。

ただし、実行ファイルがマルチプロセス設計に基づいている場合、オペレーティング システムは元のプロセス上に複数のプロセスを作成します。これらのプロセス間で実行されるコードは同じですが、実行結果は同じになる可能性があります。 . 違うかもしれません。

なぜ複数のプロセスが必要なのでしょうか? 最も直感的なアイデアは、オペレーティング システムがマルチコアをサポートしている場合、実行可能ファイルは、マルチコアでなくても、あるプロセスが I/O 操作を待機している間、別のコアで実行できるということです。プロセスは CPU 上でも実行できます。CPU 上で実行すると、CPU 使用率とプログラム効率が向上します。

Linux システムでは、fork() を使用して親プロセス内に子プロセスを作成できます。プロセスが fork() を呼び出した後、システムはまずストレージ データやコード スペースなどのリソースを新しいプロセスに割り当てます。その後、元のプロセスのすべての値とステータスが新しいプロセスにコピーされ、いくつかの値だけが元のプロセスと異なり、異なるプロセスを区別します。

fork() 関数は、親プロセスに 1 回 (子プロセスの PID またはフォーク失敗情報を返す)、子プロセスに 1 回 (0 を返す) の 2 回戻ります。この時点で、2 つのプロセスは分離され、それぞれがシステム内で実行されました。

2. ノンブロッキング IO:

まず IO とは何か、つまり入出力の動作です。ネットワーク IO の本質はソケットの読み取りであり、Linux システムではソケットはストリームとして抽象化されており、IO は対流操作として理解できます。 IO アクセス (例として読み取り) の場合、データはまずオペレーティング システム カーネルのバッファにコピーされ、次にオペレーティング システム カーネルのバッファからアプリケーション プログラムのアドレス空間にコピーされます。

したがって、読み取り操作が発生すると、次の 2 つの段階を経ます。

最初の段階 (データの待機): データの準備ができるのを待機します (データが準備されるのを待機します)。準備ができて)。

第 2 段階 (データのコピー): カーネルからプロセスへのデータのコピー(カーネルからプロセスへのデータのコピー)

ソケット ストリーム (つまり IO) の場合、

最初のステップ: 通常、データ パケットがネットワークに到着し、カーネル内のバッファにコピーされるのを待機します。

ステップ 2: カーネル バッファからアプリケーション プロセス バッファにデータをコピーします。

ネットワーク IO モデルは大まかに次のとおりです。

同期モデル (同期 IO)

ブロッキング IO (ブロッキング IO) ) リソースが利用できない場合、IO リクエストはフィードバック結果 (データまたはタイムアウト) が得られるまでブロックされます。 Linux では、デフォルトですべてのソケットがブロックされますが、IO ブロックの特徴は、IO 実行の両方の段階 (データの待機とデータのコピー) でブロックされることです。

ノンブロッキング IO (ノンブロッキング IO) リソースが利用できない場合、IO リクエストは終了して戻ります。戻りデータは、リソースが利用できないことを示します。 Linux では、データの準備ができていなくてもユーザー プロセスはブロックされず、カーネルはすぐにプロセスに戻り、このコマンドをすぐに満たすことができないことを示します (EAGAIN または EWOULDBLOCK)。したがって、ノンブロッキングはポーリングを使用して実現されます。

IO の多重化 (多重化 IO) IO の多重化は、select、poll、epoll と呼ばれるもので、この IO 方法はイベント駆動型 IO と呼ばれることもあります。 select/epoll の利点は、単一のプロセスで複数のネットワーク接続の IO を同時に処理できることです。

その基本原理は、select、poll、および epoll の関数が、担当するすべてのソケットを継続的にポーリングすることです。データが特定のソケットに到着すると、ユーザー プロセスに通知されます。 IO多重化モデルでは、実際には各ソケットはノンブロッキングに設定されるのが一般的です。

ただし、実際には、ユーザーのプロセス全体が常にブロックされます。プロセスがソケット IO によってブロックされるのではなく、select 関数によってブロックされるだけです。したがって、IO 多重化は、select や epoll などのシステム コールではブロックされますが、recvfrom などの実際の I/O システム コールではブロックされません。

シグナル駆動 IO (シグナル駆動 IO)

非同期 IO (非同期 IO) ユーザー プロセスは読み取り操作を開始した後、すぐに他の処理を開始できます。 。一方、カーネルの観点から見ると、非同期読み取りを受信するとすぐに返されるため、ユーザー プロセスにブロックが発生することはありません。

その後、カーネルはデータの準備が完了するのを待ち、データをユーザー メモリにコピーします。これがすべて完了すると、カーネルはユーザー プロセスにシグナルを送信して、次のことを伝えます。読み取り操作が完了します。

3. Epoll : epoll は理解しやすくなりました。epoll は、ファイル記述子の大きなバッチを処理するために Linux カーネルによって作成された改良されたポーリングです。Linux における多重化された IO です。インターフェイス選択/ポーリングの拡張バージョン。多数の同時接続のうち少数のアクティブな接続のみがアクティブである場合に、プログラムのシステム CPU 使用率を大幅に向上させることができます。

PS. いくつかの注意点:

1: IO 多重化は同期ブロッキング モデルですか、それとも非同期ブロッキング モデルですか?

同期ではメッセージ通知をアクティブに待機する必要がありますが、非同期ではメッセージ通知を受動的に受信し、コールバック、通知、ステータスなどを通じてメッセージを受動的に取得する必要があります。 IO が選択ステージまでブロックを多重化する場合、ユーザー プロセスはアクティブに待機し、選択関数を呼び出してデータ準備完了ステータス メッセージを取得し、そのプロセス ステータスはブロックされます。したがって、IO 多重化は同期ブロッキング モードとして分類されます。

2: 同時実行性とは何ですか? 同時実行性が高い状態とはどのような状態ですか?

高度な同時実行プログラムでは、通常、マルチスレッド同期ブロッキング方式ではなく、同期非ブロッキング方式が使用されます。これを理解するには、まず同時実行と並列処理の違いを見てください。つまり、同時実行数は同時に実行されるタスク (同時に処理される HTTP リクエストなど) の数を指し、並列数は同時に動作できる物理リソースの数を指します。同時に(CPU コアの数など)。

タスクのさまざまな段階を適切にスケジュールすることで、同時実行数が並列度よりもはるかに大きくなる可能性があります。これが、数個の CPU で数万のユーザーの同時リクエストをサポートできる秘密です。このように同時実行性が高い状況では、タスク (ユーザー要求) ごとにプロセスまたはスレッドを作成すると、非常にコストがかかります。同期ノンブロッキング方式では、複数の IO リクエストをバックグラウンドにスローできるため、1 つのプロセスで多数の同時 IO リクエストに対応できます。

以上がWorkerman で知っておくべきいくつかの概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
workerman和swoole性能谁更好?如何选择?workerman和swoole性能谁更好?如何选择?Dec 01, 2022 am 10:00 AM

workerman 对比 swoole 实际开发项目中,你会选择哪个?对于新手学哪个较好,有什么建议吗?

如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能Jul 17, 2023 am 10:21 AM

如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能随着移动游戏的兴起,跨平台游戏联机功能成为游戏开发者关注的焦点之一。PHP作为一种广泛应用于Web开发的语言,而Unity3D作为一款强大的跨平台游戏引擎,如何实现二者之间的联机功能成为了开发者们思考的问题。本文将介绍如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功

如何利用PHP和Unity3D开发基于Workerman的实时多人游戏如何利用PHP和Unity3D开发基于Workerman的实时多人游戏Jul 18, 2023 am 09:54 AM

如何利用PHP和Unity3D开发基于Workerman的实时多人游戏随着游戏行业的不断发展,实时多人游戏成为了一种趋势。而PHP作为一种广泛使用的服务器端脚本语言和Unity3D作为一种流行的游戏开发引擎,如果能够结合起来开发实时多人游戏,将会带来更加丰富的玩法和用户体验。本文将详细介绍如何利用PHP和Unity3D开发基于Workerman的实时多人游戏

PHP和Unity3D如何利用Workerman实现服务器端推送功能PHP和Unity3D如何利用Workerman实现服务器端推送功能Jul 18, 2023 pm 12:01 PM

PHP和Unity3D如何利用Workerman实现服务器端推送功能在现代的网络应用中,服务器端推送功能(ServerPush)显示了它的强大威力。它可以实时地将信息推送给客户端,而无需客户端不停地向服务器发起请求。在本文中,我们将讨论如何使用PHP和Unity3D结合使用Workerman框架来实现服务器端推送功能。Workerman是一个使用纯PHP编

如何使用Workerman实现PHP和Unity3D的数据统计和分析功能如何使用Workerman实现PHP和Unity3D的数据统计和分析功能Jul 16, 2023 pm 11:43 PM

如何使用Workerman实现PHP和Unity3D的数据统计和分析功能引言:随着互联网的快速发展,数据统计和分析变得愈发重要。在PHP和Unity3D开发过程中,我们经常需要收集和分析用户的行为数据,以便进行产品改进和决策制定。本文将介绍如何使用Workerman这个高性能的PHP开发框架实现PHP和Unity3D之间的数据统计和分析功能。一、Worker

如何使用Workerman实现PHP和Unity3D的多人协同编辑功能如何使用Workerman实现PHP和Unity3D的多人协同编辑功能Jul 17, 2023 pm 04:03 PM

如何使用Workerman实现PHP和Unity3D的多人协同编辑功能引言:在现如今的互联网时代,多人协同编辑已经成为一个非常重要和常见的功能需求。无论是团队合作中的文档编辑,还是多人在线游戏中的场景编辑,都需要实现多人同时编辑同一个文件或场景的功能。本文将介绍如何使用Workerman框架实现PHP和Unity3D的多人协同编辑功能,并提供代码示例。一、什

如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏Jul 17, 2023 pm 10:55 PM

如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏概述:多人在线游戏一直是游戏开发领域的一个热门话题,而拼图游戏作为一种简单、有趣的休闲游戏,也在线上游戏中广受欢迎。本文将介绍如何使用Workerman搭建服务器,并使用PHP和Unity3D开发一个简单的多人在线拼图游戏,实现实时的游戏互动。搭建服务器首先,我们需要搭建一个服务器来提供网

聊聊Laravel中怎么接入workerman聊聊Laravel中怎么接入workermanDec 07, 2022 pm 07:21 PM

laravel+websocket是即时通讯开发必备利器,那么Laravel中怎么接入workerman​?下面本篇文章给大家介绍一下laravel快速接入websocket的方法,希望对大家有所帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。