PHP は、pcntl と libevent を使用してタイマー関数を実装します。まず、pcntl (PHP スレッド) の例を見てみましょう。
function newChild($func_name) {
echo "enter newChildn"
$args = func_get_args(); args[0] );
$pid = pcntl_fork();
if ($pid == 0) {
function_exists($func_name) および exit(call_user_func_array($func_name, $args)) または exit(-1); } else if( $pid == -1) {
csl、興味があれば参加できますで議論してください)
function on_timer() {
echo "タイマーが呼び出されました";
}
/**
* @param $func 文字列、関数名
* @param $timeouts int、時間遅延の microtimes
*/
function timer($func, $timeouts){
echo "タイマーを入力"
$base =event_base_new()
$event =event_new();
event_set($event, EV_TIMEOUT, $func);
event_base_set($event, $timeouts);
$ pid = newChild("タイマー", "on_timer", 5000000);
if ( $pid > 0 ) {
echo "マスタープロセス終了"
}
PHP は、pcntl を拡張して「マルチスレッド」を実装します (プロセス)
pcntl とticks
ticks を、declare(ticks = n) {statement} によって実装します。 语法定义的 , declare 语法目前只能接受 ticks, 他定义的 ticks = n 的意义是当 declare 指定的语句块中执行了 N 条低级语句去发生一个事件 , 这个事件可以通过 register_tick_function($function_name) 来注册 .
pcntl 的信号机制是基于 ticks 机制实现的 . 因此 , 我们使用 pcntl 族函数中信号相关的函数时 , 需要在前面增加 declare(ticks = n) 语法结构 .
int pcntl_alarm(int $seconds):
$seconds 秒后向进程发送一个 SIGALRM 信号 , 每次调用 pcntl_alarm 方法都会取消之前设置的时钟 .
void pcntl_exec(string $path[, array $args[, array $env]]):
在当前进程空间执行一个程序 .
$path: 必须是二进制可执行文件 , 或具有有效脚本头信息 (#!/usr/local/bin/php) 的脚本文件路径 .
$args: 将要传递给该程序的字符串参数列表 ( 数组形式 )
$envs: 环境变量 . 以数组 (key => value 形式 ) 方式传递给要执行程序的环境变量 .
int pcntl_for k (void):
创建一个子进程 , 该子进程与父进程仅仅是 PID( 进程号 ) 和 PPID( 父进程号 ) 不同 .
在父线程执行时返回创建的子进程 pid, 在子线程执行时返回 0, 创建子进程失败时会在父进程上下文返回 -1, 并引发 php 错误 .
理解这里的 fork 需要知道 : pcntl_fork 创建的是一个分支节点 , 相当于一个标记 , 父进程完成后 , 子进程会从标记处继续执行 , 也就是说 pcntl_fork 后面的代码分别被父进程和子进程执行了两遍 , 而两个进程在执行过程中得到的返回值是不同的 . 因此 , 才可以分离父子进程执行不同的代码 .
int pcntl_getpriority([int $pid = getmypid()[, int $process_identifier = PRIO_PROCESS]]):
获取给定 $pid 对应的进程的优先级 , 默认是通过 getmypid() 获取到的值也就是当前进程 .
$pid: 如果没有指定 , 默认是当前进程 .
$process_identifier: PRIO_PGRP, PRIO_USER, PRIO_PROCESS 三者之一 , 默认 PRIO_PROCESS. 其中 PRIO_PGRP 指获取进程组的优先级 , PRIO_USER 指获取用户进程的优先级 , PRIO_PROCESS 指获取特定进程优先级 .
返回进程的优先级 , 或者在发生错误时返回 false, 值越小说明越优先
bool pcntl_setpriority(int $priority[, int $pid = getmypid()[, int $process_identifier = PRIO_PROCESS]]:
设置进程的优先级 .
$priority: 优先级值 , -20 到 20 的范围内 , 默认优先级为 0. 值越小说明越优先 .
$pid: 如果没有指定 , 指当前进程
$process_identifier: 意义同 pcntl_getpriority 的 $process_identifier.
设置成功返回 TRUE, 失败返回 FALSE.
bool pcntl_signal_dispatch(void):
调用通过 pcntl_signal() 安装的即将发生的信号的处理器 .
调用成功返回 TRUE, 失败返回 false.
php 5.3.3 加入
bool pcntl_signal(int $signo, callback $handler[, bool $restart_syscalls = true]):
为指定的信号 $signo 安装一个新的信号处理器 $handler.
最后一个参数不明白意义 .
bool pcntl_sigprocmask(int $how, array $set[, array &$oldset]):
增加 , 删除或设置锁信号 , 具体的行为依赖于 $how 参数
$how: SIG_BLOCK 用于把信号增加到当前锁信号中 , SIG_UNBLOCK 用于把信号从当前锁信号中移除 , SIG_SETMASK 用于用给定的信号列表替换当前锁信号 .
$set: 要增加 , 移除或设置的信号列表 .
$oldset: 用于向调用者返回旧的锁定信号 .
成功返回 TRUE, 失败返回 FALSE.
int pcntl_sigtimedwait(array $set[, array &$siginfo[, int $seconds = 0[, int $nanoseconds = 0]]]):
pcntl_sigtimedwait 实际上和 pcntl_sigwaitinfo() 所做的是同样的事情 , 不过 pcntl_sigtimedwait 多了两个增强的参数 $seconds 和 $nanoseconds, 这样就允许脚本的停留时间有一个上限而不是无限制等待 .
$set: 需要等待的信号列表
$siginfo: 用来向调用者返回等待得到的信号的信息 , 信息内容见 pcntl_sigwaitinfo
$seconds: 超时的秒数
$nanoseconds: 超时的纳秒数
成功后 , pcntl_sigtimedwiat() 返回信号编号
int pcntl_sigwaitinfo(array $set[, array &$siginfo]):
挂起当前脚本的执行 , 直到接受到 $set 中的某个信号 , 如果其中的一个信号将要到达 ( 比如被 pcntl_sigprocmask 锁定 ) 那么 pcntl_sigwaitinfo 将会立刻返回
$set: 等待的信号列表
$siginfo: 用来向调用者返回等待得到的信号的信息 , 该信息包含以下内容 :
1. 所有信号都有以下三个信息 :
a) signo: 信号编号
b) errno: 错误号
c) code: 信号代码
2. SIGCHLD 信号特有的信息
a) ステータス: 終了値またはシグナル
b) utime: ユーザーの消費時間
c) stime: システムの消費時間
d) pid: 送信プロセス ID
e) uid: 送信プロセスの実際のユーザー ID SIGILL、SIGFPE 、SIGSEGV、SIGBUS が所有する情報
a) use using through ' s ' s through through using 's ' through ‐to ‐‐ ‐‐‐‐ and to
int pcntl_wait(int &$status[, int *options = 0] ):
子プロセスが終了するまで、またはシグナルによって現在のプロセスの終了が要求されるか、Exit の呼び出し時に子プロセスがすでに呼び出されている場合 (一般にゾンビプロセスになる) まで、現在のプロセスをハングします。 、この関数はすぐに戻り、すべてのシステム リソースが解放されます。
$status は、子プロセスのステータス情報を保存するために使用されます。このステータス情報は、pcntl_wifexited、pcntl_wifstopped、pcntl_wifsignaled、pcntl_wexitstatus、pcntl_wtermsig、によって生成されます。 pcntl_wstopsig.
$options: システムで wait3 が許可されている場合 (ほとんどの BSD 類似システム)、オプションのオプション パラメーターを指定できます。このパラメーターが指定されていない場合、wait はシステム コールを使用します。このパラメータは効果がありません。$options の値は 0 または 2 つの定数 WNOHANG と WUNTRACED です。この関数は、終了している子プロセスの PID を返します。エラーが発生した場合、または WNOHANG がオプションとして指定されている場合は -1 を返します (システム)。 wait3 が利用できない場合)、有効な子プロセスが存在しない場合は、0 を返します
ゾンビプロセス: 親プロセスはフォーク後であるため、子プロセスがいつ終了するかを予測することは不可能であるため、子プロセスは親に何らかの情報を残します子プロセスの終了 (論理的な終了) から親プロセスがその死体を収集するまでの期間を、ゾンビと呼ばれるデータ構造と呼びます。親プロセスが終了すると、その後、すべての子プロセスが Init に引き継がれます。そのため、親プロセスが終了しない場合は、ゾンビ プロセスが常に占有されます。システムプロセス番号が枯渇すると、新しいプロセスを開始できなくなります。したがって、安全な方法は、親プロセス内で自分自身で生成された子プロセスの死体を収集することです。 int $pid, int &$status[, int $options = 0]):
指定された $pid を持つ子プロセスが終了するか、現在のプロセスが終了シグナルを受信するか、呼び出すための ige シグナルを受信するまで、現在のプロセスを一時停止します。シグナル ハンドラー。
指定された $pid に対応する子プロセスがこれを呼び出している場合、関数は終了しました (ゾンビ状態)。関数はすぐに戻り、すべてのシステム リソースが解放されます。
$pid: プロセス番号 (-1 未満)。 -1 は、プロセス グループ内の子プロセスを待機していることを示し、プロセス グループ番号は $pid の絶対値です。 -1 は、pcntl_wait 関数の動作と一致して、紫禁城を待機していることを示します。 0 は呼び出しプロセスと同じグループ内の子プロセスを待機していることを示し、0 より大きい場合は特定のプロセスを示します。
$status: このステータス情報は、次の関数によって生成されます。 pcntl_wifexited、pcntl_wifstopped、pcntl_wifsignaled、pcntl_wexitstatus、pcntl_wtermsig、pcntl_wstopsig.
$options: pcntl_wait の $options と同じ意味です
int pcntl_wexitstatus(int $status):
この関数は、中断された子プロセスの戻りコードを返します。 pcntl_wife 終了しました関数は TRUE を返します。 $status パラメーターは、pcntl_waitpid によって生成されたステータス情報です。
bool pcntl_wifexited(int $status):
指定されたステータスが子プロセスが正常に終了したことを示しているかどうかを確認します。
bool pcntl_wifsignaled (int $status):指定されたステータスが、子プロセスが特定のシグナルを受信したために終了したことを示しているかどうかを確認します。
bool pcntl_wifstopped(int $status):
$status が子プロセスが現在停止していることを示すことができるかどうかを確認します。この関数は動作している場合にのみ有効です。 pcntl_waitpid 関数で使用される WUNTRACED が $options パラメーターの値として使用されるときに生成される $status について、
int pcntl_wstopsig(int $status):
$status を分析して、子プロセスを停止するシグナルの番号を返します。関数のみ pcntl_wifsignaled が TRUE を返す場合にのみ有効です。
int pcntl_wtermsig(int $status):
プロセスを中断するシグナル番号を返します。この関数は、pcntl_wifsignaled が TRUE を返す場合にのみ有効です。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール
