Use zval storage for php://memory stream
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 15 h
- PR fusionados (30 d)
- 103
Descripción
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?
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza rastreando la implementación del stream php://memory y compara su comportamiento de almacenamiento con el wrapper personalizado respaldado por zval descrito en el issue. Determina cómo debería gestionarse php://temp y cómo afecta al diseño el compromiso de tamaño de aproximadamente 200K. Se considera terminado cuando el stream se beneficia de copy-on-write sin empeorar el rendimiento de las cadenas más pequeñas.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, php
- Área
- backend, performance
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100