Use zval storage for php://memory stream

Ouverte
#11,106 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
c, php
Domaine
backend, performance

Piste de recherche

Commencez par suivre l’implémentation du flux php://memory et comparez son comportement en matière de stockage avec celui du wrapper personnalisé basé sur zval décrit dans l’issue. Déterminez comment php://temp doit être géré et comment le compromis de taille d’environ 200K affecte la conception. Le travail est terminé lorsque le flux bénéficie de copy-on-write sans dégrader les performances pour les chaînes plus petites.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Category: Streams Feature Status: Needs Triage
Description

The following code increases the peak memory usage of PHP twice:

$content = str_repeat('hello', 50000);
$h = fopen('php://memory', 'r+');
fwrite($h, $content);

The reason is that PHP cannot currently use copy-on-write when writing to the stream.

This is something that can be worked around by using a custom stream wrapper that keeps data in a zval, as done in e.g.
https://github.com/Nyholm/psr7/pull/230

Using this proved useful for strings longer than ~200K. For smaller strings, using a custom stream wrapper has a higher cost than the memcopy (see https://github.com/Nyholm/psr7/pull/241).

Could it be possible to improve php://memory (and possibly php://temp) to make it use a zval storage to benefit from copy-on-write?

Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 15 h
PR mergées (30 j)
103

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de php/php-src

Toutes les issues de php/php-src

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.