Explication détaillée du principe de file d'attente en PHP et du code graphique d'écriture de fichiers

黄舟
Libérer: 2023-03-16 21:34:01
original
1398 Les gens l'ont consulté

Les exemples de cet article décrivent le principe de la file d'attente PHP et les cas d'écriture de fichiers basés sur la file d'attente. Partagez-le avec tout le monde pour référence, les détails sont les suivants :

La file d'attente est un tableau linéaire, qui est réalisé selon le principe du premier entré, premier sorti :

Rejoindre l'équipe :

Quitter l'équipe :

PHP implémente la file d'attente : Le premier élément est la tête de la file d'attente, et le dernier élément est la queue de la file d'attente

<?php
/**
 * 队列就是这么简单
 *
 * @link
 */
$array = array(&#39;PHP&#39;, &#39;JAVA&#39;);
array_push($array, &#39;PYTHON&#39;); //入队列
array_shift($array); //出队列
Copier après la connexion

Qu'est-ce qu'une file d'attente double (ou file d'attente bidirectionnelle) Deque, toutes les files d'attente doubles nommées ?

Autrement dit, les éléments peuvent être entrés ou retirés de la file d'attente à n'importe quelle partie de la file d'attente si nous appelons ces méthodes insertLeft() et insertRight(), ainsi que RemoveLeft() et RemoveRight(). Si l'appel des méthodes insertLeft() et removeLeft() est strictement interdit (ou si le fonctionnement du segment droit est désactivé), la file d'attente double fonctionne comme une pile. Il est interdit d'appeler insertLeft() et removeRight() (ou une autre paire de méthodes au contraire), et sa fonction est la même qu'une file d'attente. Un deque est une structure de données polyvalente par rapport à une pile ou une file d'attente.

PHP implémente une file d'attente à double extrémité

<?php
class Deque
{
  public $queue = array();
  /**(尾部)入队 **/
  public function addLast($value)
  {
    return array_push($this->queue,$value);
  }
  /**(尾部)出队**/
  public function removeLast()
  {
    return array_pop($this->queue);
  }
  /**(头部)入队**/
  public function addFirst($value)
  {
    return array_unshift($this->queue,$value);
  }
  /**(头部)出队**/
  public function removeFirst()
  {
    return array_shift($this->queue);
  }
  /**清空队列**/
  public function makeEmpty()
  {
    unset($this->queue);
  }
  /**获取列头**/
  public function getFirst()
  {
    return reset($this->queue);
  }
  /** 获取列尾 **/
  public function getLast()
  {
    return end($this->queue);
  }
  /** 获取长度 **/
  public function getLength()
  {
    return count($this->queue);
  }
}
Copier après la connexion

Objectif de la file d'attente :

File d'attente peut gérer la transmission et le stockage des données de manière asynchrone. Lorsque vous insérez fréquemment des données dans la base de données et soumettez des données aux moteurs de recherche, vous pouvez utiliser des files d'attente pour insérer des données de manière asynchrone. De plus, une logique de traitement plus lente et une logique de traitement avec une concurrence limitée peuvent également être placées en arrière-plan pour le traitement via les files d'attente de messages, telles que la conversion vidéo FLV, l'envoi de messages texte sur téléphone mobile, l'envoi d'e-mails, etc.

Cas du projetIl y a un projet ici En raison de problèmes d'autorisation du serveur, il n'y a aucun moyen d'installer le programme de file d'attente et le. la concurrence est de 300+, le fournisseur de services Le nombre maximum de connexions à la base de données est de 300. Afin de résoudre ce problème, j'ai écrit un programme de file d'attente simple. Le code est le suivant

Lire le code de la file d'attente : <🎜. >

Le programme de file d'attente de lecture est en fait une boucle infinie. Si le programme ne définit pas de point d'arrêt, il continuera à boucler

pour lire le fichier
<?php
set_time_limit(0);
$file_name3 = &#39;3.txt&#39;;//这个地方是讲队列文件读出的内容写入文件,test中代替的是mysql数据库操作
$file3 = fopen($file_name3,&#39;a&#39;);
while(true)
{
  $c = FALSE;
  $file_name = &#39;1.txt&#39;;//队列文件
  $file = fopen($file_name,&#39;r&#39;);
  if(!feof($f))
  {
    //获得第一条数据
    $a = fgets($file);
    if(!empty($a))
    {
      $c = TRUE;
      fwrite($file3,$a);//这里可以改为数据库操作
    }
  }
  fclose($file);
  if($c)
  {
    //将文件的第一条数据删除
    exec(&#39;sed -i \&#39;1d\&#39; /var/www/csv_sql/1.txt&#39;);
  }
  sleep(1);
  if(time()>=strtotime(&#39;20160416150000&#39;))
  {
    exit;
  }
}
fclose($file3);
Copier après la connexion

et écrire. le programme de file d'attente. C'est relativement simple, il suffit d'écrire le fichier

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal