Maison développement back-end tutoriel php Comment utiliser Fibers pour obtenir la concurrence dans PHP8.0

Comment utiliser Fibers pour obtenir la concurrence dans PHP8.0

May 14, 2023 am 09:01 AM
php 并发 fibers

Avec le développement continu de la technologie Internet moderne, le nombre de visites de sites Web augmente, ce qui impose également des exigences plus élevées en matière de capacités de traitement simultanées du serveur. Comment améliorer les capacités de traitement simultané du serveur est un problème auquel chaque développeur doit faire face. Dans ce contexte, PHP8.0 introduit la nouvelle fonctionnalité Fibers, permettant aux développeurs PHP de maîtriser une nouvelle façon de traiter la concurrence.

Qu'est-ce que les fibres ?

Tout d'abord, nous devons comprendre ce que sont les fibres. Les fibres sont des threads légers qui prennent en charge efficacement le traitement asynchrone du code PHP. Le code PHP traditionnel est monothread et ne peut pas véritablement implémenter d'opérations asynchrones. Il doit souvent attendre la fin des opérations d'E/S, ce qui entraîne un blocage inutile. L'émergence de Fibers résout ce problème, permettant au code PHP de prendre en charge le traitement simultané comme d'autres langages tels que Node.js.

Utiliser les fibres pour obtenir la simultanéité

Parlons de la façon d'utiliser les fibres pour obtenir la simultanéité.

  1. Installer l'extension Swoole

En PHP8.0, Fibers est implémenté sur la base de l'extension Swoole, vous devez donc d'abord installer l'extension Swoole. Il peut être installé via PECL :

pecl install swoole 
Copier après la connexion
  1. Création d'objets Fiber

L'utilisation de Fibers pour obtenir la concurrence nécessite la création d'objets Fiber. La création d'objets Fibre peut être réalisée en créant des fonctions anonymes ou des méthodes de classe. Par exemple :

$fiber = new SwooleFiber(function() {
  // 这里是并发要执行的代码
});

或

class MyClass {
  public function onReceive($server, $fd, $reactor_id, $data) {
    // 这里是并发要执行的代码
  }
}
$fiber = new SwooleFiber([$myClass, 'onReceive']);
Copier après la connexion
  1. Start Fiber

Après avoir créé l'objet Fiber, vous devez démarrer Fiber. Pour démarrer Fiber, vous pouvez utiliser la méthode start ou la méthode suspend. Utilisez la méthode start pour démarrer Fiber immédiatement et exécuter le code défini dans Fiber. Par exemple : start方法或者suspend方法。使用start方法可以立即启动Fiber并执行Fiber中定义的代码。例如:

$fiber->start();
Copier après la connexion

suspend方法则可以暂停Fiber的执行,等待下一次执行。例如:

$fiber->suspend();
Copier après la connexion
  1. 切换Fiber

在Fiber中,使用swoole_fiber_switch函数可以切换Fiber的执行。例如:

function foo() {
  echo 'foo ';
  yield;
  echo 'bar ';
  yield;
  echo 'baz';
}
$fiber1 = new SwooleFiber($foo);
$fiber2 = new SwooleFiber($foo);
$fiber1->start();
$fiber2->start();
while ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD || $fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
  if ($fiber1->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber1);
  }
  if ($fiber2->getStatus() !== SwooleFiber::STATUS_DEAD) {
    swoole_fiber_switch($fiber2);
  }
}
Copier après la connexion

在上面的例子中,我们创建了两个Fiber对象,并让它们交替执行,输出foobarbaz

  1. 使用协程API

除了手动切换Fiber外,Swoole扩展还提供了一些协程API,可以方便地进行并发处理。例如,使用Co::create方法可以创建协程对象,并使用Co::parallel可以让多个协程并行执行。例如:

$urls = [
  'http://example.com/foo',
  'http://example.com/bar',
  'http://example.com/baz',
];
$coros = [];
foreach ($urls as $url) {
  $coros[] = Co::create(function() use ($url) {
    $html = file_get_contents($url);
    return strlen($html);
  });
}
$results = Co::parallel($coros);
Copier après la connexion

在上面的例子中,我们创建了三个协程对象,分别访问三个URL,最后使用Co::parallelrrreee

La méthode suspend peut suspendre l'exécution de Fiber et attendre la prochaine exécution. Par exemple :

rrreee

    Switch Fiber

    #🎜🎜#Dans Fiber, utilisez la fonction swoole_fiber_switch pour changer Exécution fibre. Par exemple : #🎜🎜#rrreee#🎜🎜#Dans l'exemple ci-dessus, nous créons deux objets Fiber et les laissons s'exécuter alternativement pour générer foobarbaz. #🎜🎜#
      #🎜🎜#Utiliser l'API coroutine#🎜🎜##🎜🎜##🎜🎜#En plus de changer manuellement de fibre, l'extension Swoole fournit également des API coroutine pour faciliter l'exécution simultanée traitement. Par exemple, utilisez la méthode Co::create pour créer un objet coroutine et utilisez Co::parallel pour permettre à plusieurs coroutines de s'exécuter en parallèle. Par exemple : #🎜🎜#rrreee#🎜🎜#Dans l'exemple ci-dessus, nous avons créé trois objets coroutine, accédé à trois URL respectivement et finalement utilisé la méthode Co::parallel pour combiner ces trois coroutines pour exécuter en parallèle, obtenir des résultats et les restituer. #🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜#Fibers est une nouvelle fonctionnalité introduite dans PHP8.0, qui utilise pleinement les capacités de traitement simultané de l'expansion Swoole. L'utilisation de Fibers peut facilement implémenter le traitement asynchrone du code PHP et améliorer les capacités de traitement simultané du serveur. Bien entendu, les fibres doivent également être utilisées avec prudence et il convient de veiller à éviter des problèmes tels que la concurrence entre les ressources. J'espère que l'introduction de cet article pourra aider les développeurs PHP à mieux comprendre les fibres et à effectuer un meilleur traitement simultané. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles