php のスレッドとコルーチンの理解
1. スレッド
スレッドは軽量プロセスとも呼ばれます。 CPUの基本的な実行単位であり、プログラム実行プロセスの最小単位であり、スレッドID、プログラムカウンタ、レジスタセット、スタックで構成されます。スレッドの導入により、プログラムの同時実行のオーバーヘッドが削減され、オペレーティング システムの同時実行パフォーマンスが向上します。スレッドには独自のシステム リソースがありません。
プロセスに対するスレッドの利点は、スレッドが高速であることです。新しいスレッドの作成やスレッドの終了、スレッド間の切り替え、スレッド間のデータや通信の共有など、スレッドの速度はそれよりも高速です。大きな利点。
スレッドの出現は、コンテキスト切り替えの消費を削減し、システムの同時実行性を向上させ、1 つのプロセスが 1 つのことしか実行できないという欠点を克服し、プロセス内の同時実行を可能にすることを目的としています。
2. Coroutine
Coroutine はユーザー モード スレッドです。「ユーザー モード スレッド」とは何かを理解するには、まず「ユーザー モード スレッド」とは何かを理解する必要があります。 「カーネル状態スレッド」。カーネル状態スレッドはオペレーティング システムによってスケジュールされます。スレッド コンテキストを切り替えるときは、まず前のスレッドのコンテキストを保存してから、次のスレッドを実行する必要があります。条件が満たされたら、前のスレッドに切り替えてコンテキストを復元します。コルーチンにも同じことが当てはまりますが、ユーザー モード スレッドはオペレーティング システムではなくプログラマによってユーザー モードでスケジュールされる点が異なります。
yield
このキーワードは、割り込みを生成し、現在のコンテキストを保存するために使用されます。たとえば、プログラム内のコードがリモート サーバーにアクセスする場合、この時点では CPU はアイドル状態になります。時間がかかるため、Yield を使用して CPU を放棄し、次のコードを実行します。次のコードがまだ CPU 以外のリソースにアクセスする場合は、yield を呼び出して CPU を放棄することもできます。実行を継続します。同期的な方法で非同期コードを作成できます。
①コルーチンの登場
コルーチンの登場以前は、マルチタスクの並行性を実現する必要があり、OS(オペレーティングシステム)のない時代には、ステート マシンを使用してマルチタスクを実装できます。単一プロセス環境で複数のタスクを逆アセンブルして実行しますが、このモードでは開発者が各タスクを明確に理解している必要があり、開発者はタスク関連の関数 (タスクなど) も開発する必要があります。タスク間の通信として)それ自体で。
その後、OS(オペレーティングシステム)が登場し、OSが提供するプロセスやスレッドの機能を利用することで、簡単にマルチタスクを実現できるようになりました。 OS では、プロセス コンテキストの切り替えは OS カーネルによって制御されます。しかし、プロセス コンテキストの頻繁な切り替えにより、OS のパフォーマンスが低下する (主に消費量の少ないタスク プロセスの短期間の実行) という問題が発生しました。
この問題を解決するために、複数のタスクを同じプロセスまたはスレッドで実行するという新しい概念が提案され始めましたが、これはOSの初期のマルチタスク実装に戻ることに相当します。 -自由な時代。そして現在、その解決策はコルーチンと呼ばれています。その本質は、タスクスイッチングの一部をカーネルからアプリケーション層に転送することです。
②PHP におけるコルーチンの基本的なツールと基本的な使用法
コルーチンを実装するために、PHP はジェネレーターと yield キーワードという 2 つの新しい機能を提供します。
(1)ジェネレーターとは何ですか?
ジェネレーターはイテレータを継承して実装します。これは PHP コードの関数定義に似ていますが、次のような yield キーワードを内部で使用します。 # 使用すると、次のようになります:
わかりました、このように使用するとはどういう意味ですか?
(1) まず、$my_gen = gen(); このコードは新しいジェネレーターをインスタンス化するだけで、内部のコードは実行されません; (2) $my_gen->current(); コードは yield " を実行します。ジェネレーターのステップ 2 で「gen1」を作成します。この時点で、コードは中断され、文字列「gen1」がジェネレーター $my_gen に渡され、current() 関数の戻り値として使用されます。ここで current() メソッドを使用し続けても、結果は変わりません $my_gen の戻り値は gen1 のままです (3) send("main send") が実行されると、文字列 "main send" " is ジェネレーター $my_gen が渡され、ステップ 2 の yield の戻り値としてジェネレーターが ret に渡されます。send() メソッドを介して、前のコンテキストが検索され、下に進みます。
上記の内容は参考用です。
推奨チュートリアル:
PHP ビデオ チュートリアル
以上がPHPスレッドコルーチンを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
