深入讲解PHP线程并发种类
线程是我们在做项目中首要考虑的,在php中怎么实现线程呢,我们这里就看看PHP线程的实现。许多 PHP 开发人员认为,由于标准的 PHP 缺少线程功能,因此实际 PHP 应用程序不可能执行多任务处理。
例如,如果应用程序需要其他 Web 站点的信息,那么在远程检索完成之前它都必须停止。这是错误的!通过本文了解如何使用 stream_select 和 stream_socket_client 实现进程内 PHP 多任务处理。PHP 不支持线程。尽管如此,与前述大多数 PHP 开发人员所相信的想法形成对比的是,PHP 应用程序可以 执行多任务处理。让我们开始尽可能清晰地描述一下 “多任务” 和 “线程” 对于 PHP 编程的意义。
PHP线程并发的种类
首先抛开几个和主题无关的例子。PHP 与多任务或并发的关系十分复杂。在较高层次上,PHP 经常涉及多任务:以多任务方式使用 标准的服务器端 PHP 安装 —— 例如,作为 Apache 模块。换句话说,若干个客户机 —— Web 浏览器 —— 可以同时请求同一个 PHP 解释的页面,而 Web 服务器将差不多同时返回所有这些页面。
一个 Web 页面不会妨碍其他 Web 页面的发送,尽管可能会由于诸如服务器内存或网络带宽之类的受限资源而使它们相互之间略有妨碍。这样,实现并发 的系统级需求可能适合使用基于 PHP 的解决方案。就实现而言,PHP 允许它的管理 Web 服务器负责实现并发。
Ajax 名下的客户端并发近几年来也已成为开发人员关注的焦点。虽然 Ajax 的含义已经变得十分模糊,但是它的一个方面是浏览器显示可以同时执行计算和保留对诸如选择菜单项之类的用户操作的响应。这实际上就是某种 多任务。用 PHP 编码的 Ajax 就是这样 —— 但是不涉及任何特定的 PHP;用于其他语言的 Ajax 框架均以完全相同的方法操作。
只粗略地涉及 PHP 的第三个并发实例是 PHP/TK。PHP/TK 是 PHP 的扩展,用于为核心 PHP 提供可移植图形用户界面(GUI)绑定。PHP/TK 允许用 PHP 编写代码构造桌面 GUI 应用程序。其基于事件的特性将模拟一种易于掌握并且比线程更少出错的并发形式。此外,并发是 “继承” 自一项辅助技术,而不是 PHP 的基本功能。
第一个示例PHP线程新的 stream_select 函数及它的几个助手使这成为可能。请考虑以下示例。
清单 1. 同时请求多个 HTTP 页面
<ol class="dp-xml"> <li class="alt"><span><span><?php </span></span></li> <li class=""><span>echo "Program starts at ". date('h:i:s') . ".n"; </span></li> <li class="alt"><span> </span></li> <li class=""> <span>$</span><span class="attribute">timeout</span><span>=</span><span class="attribute-value">10</span><span>; </span> </li> <li class="alt"> <span>$</span><span class="attribute">result</span><span>=</span><span class="attribute-value">array</span><span>(); </span> </li> <li class=""> <span>$</span><span class="attribute">sockets</span><span>=</span><span class="attribute-value">array</span><span>(); </span> </li> <li class="alt"> <span>$</span><span class="attribute">convenient_read_block</span><span>=</span><span class="attribute-value">8192</span><span>; </span> </li> <li class=""><span> </span></li> <li class="alt"><span>/* Issue all requests simultaneously; there's no blocking. */ </span></li> <li class=""> <span>$</span><span class="attribute">delay</span><span>=</span><span class="attribute-value">15</span><span>; </span> </li> <li class="alt"> <span>$</span><span class="attribute">id</span><span>=</span><span class="attribute-value">0</span><span>; </span> </li> <li class=""><span>while ($delay > 0) { </span></li> <li class="alt"> <span>$</span><span class="attribute">s</span><span>=</span><span class="attribute-value">stream_socket_client</span><span>("phaseit.net:80", $errno, </span> </li> <li class=""><span>$errstr, $timeout, </span></li> <li class="alt"><span>STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); </span></li> <li class=""><span>if ($s) { </span></li> <li class="alt"><span>$sockets[$id++]=$s; </span></li> <li class=""> <span>$</span><span class="attribute">http_message</span><span>=</span><span class="attribute-value">"GET /demonstration/delay?delay="</span><span> . </span> </li> <li class="alt"><span>$delay . " HTTP/1.0rnHost: phaseit.netrnrn"; </span></li> <li class=""><span>fwrite($s, $http_message); </span></li> <li class="alt"><span>} else { </span></li> <li class=""><span>echo "Stream " . $id . " failed to open correctly."; </span></li> <li class="alt"><span>} </span></li> <li class=""> <span>$delay </span><span class="attribute">-</span><span>= </span><span class="attribute-value">3</span><span>; </span> </li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>while (count($sockets)) { </span></li> <li class=""> <span>$</span><span class="attribute">read</span><span>=$sockets; </span> </li> <li class="alt"> <span>stream_select($read, $</span><span class="attribute">w</span><span>=</span><span class="attribute-value">null</span><span>, $</span><span class="attribute">e</span><span>=</span><span class="attribute-value">null</span><span>, $timeout); </span> </li> <li class=""><span>if (count($read)) { </span></li> <li class="alt"><span>/* stream_select generally shuffles $read, so we need to </span></li> <li class=""><span>compute from which socket(s) we're reading. */ </span></li> <li class="alt"><span>foreach ($read as $r) { </span></li> <li class=""> <span>$</span><span class="attribute">id</span><span>=</span><span class="attribute-value">array_search</span><span>($r, $sockets); </span> </li> <li class="alt"> <span>$</span><span class="attribute">data</span><span>=</span><span class="attribute-value">fread</span><span>($r, $convenient_read_block); </span> </li> <li class=""><span>/* A socket is readable either because it has </span></li> <li class="alt"><span>data to read, OR because it's at EOF. */ </span></li> <li class=""><span>if (strlen($data) == 0) { </span></li> <li class="alt"><span>echo "Stream " . $id . " closes at " . date('h:i:s') . ".n"; </span></li> <li class=""><span>fclose($r); </span></li> <li class="alt"><span>unset($sockets[$id]); </span></li> <li class=""><span>} else { </span></li> <li class="alt"> <span>$result[$id] </span><span class="attribute">.</span><span>= $data; </span> </li> <li class=""><span>} </span></li> <li class="alt"><span>} </span></li> <li class=""><span>} else { </span></li> <li class="alt"><span>/* A time-out means that *all* streams have failed </span></li> <li class=""><span>to receive a response. */ </span></li> <li class="alt"><span>echo "Time-out!n"; </span></li> <li class=""><span>break; </span></li> <li class="alt"><span>} </span></li> <li class=""><span>} </span></li> <li class="alt"><span>?> </span></li> </ol>
如果运行此清单,您将看到如下所示的输出。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
