Después de luchar con la fuente PHP durante media hora, me di por vencido. : P La pregunta es: ¿a qué llamada del sistema se reduce la llamada a la función PHP flock() en un sistema Gentoo Linux? Estoy teniendo algunos problemas (como bloque por 30 segundos en cada uno de 20 iteraciones de bucle tipo de problemas) y me gustaría saber por qué es así.PHP flock() - ¿Qué hay debajo del capó?
Respuesta
A menos que malinterprete lo que está preguntando, PHP flock()
es una llamada a la función del sistema Unix flock()
en Gentoo. Tienen una semántica idéntica.
¿Lo está usando en una unidad en red o montada? No me sorprendería si lo que está experimentando es deadlock, y algunos de los comments in the documentation hablan sobre eso.
Lea atentamente - Gentoo Linux aquí. Pero la configuración completa es un poco complicada, así que solo quiero saber qué es lo que llama debajo, para que yo pueda armar la imagen completa yo mismo. –
Y no, no es un punto muerto, de eso estoy seguro. Pero hay otras cosas que sospecho. –
Ahh, acabo de descubrir que el archivo está en un montaje NFS. Y el cuadro de host también intenta agruparlo() (cargar servidores web equilibrados, verá). –
// example: $stream = fopen(FILE, 'rb') or die('???');
$md = stream_get_meta_data($stream);
echo $md['wrapper_type'];
flock($stream);
Si se imprime
plainfile entonces la llamada al rebaño php function() es manejado por php_stdiop_set_option (...) que llama a flock(). Dependiendo de si PHP se compiló con HAVE_FLOCK o no, esta puede ser la llamada al sistema
flock() o una función definida en flock_compat.c que utiliza
fcntl(). En mi sistema gentoo PHP fue compilado con HAVE_FLOCK.
principales/arroyos/plain_wrapper.c @ static int php_stdiop_set_option (...):
case PHP_STREAM_OPTION_LOCKING: if (fd == -1) { return -1; } if ((zend_uintptr_t) ptrparam == PHP_STREAM_LOCK_SUPPORTED) { return 0; } if (!flock(fd, value)) { data->lock_flag = value; return 0; } else { return -1; } break;
http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html
/etc/standard/flock_compat.c [line 66]
ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);
Si esta función es llamada o no depende del tiempo de compilación, defina HAVE_FLOCK – VolkerK
- 1. Operaciones atómicas: debajo del capó
- 2. Encuadernación de parámetros: ¿Qué sucede debajo del capó?
- 3. ¿Qué usa Flash VM debajo del capó para dibujar?
- 4. Imprimir objetos y unicode, ¿qué hay debajo del capó? ¿Cuáles son las buenas pautas?
- 5. PHP flock() alternativa
- 6. ¿Cómo se diferencia IEnumerable de IObservable debajo del capó?
- 7. Debajo del capó, ¿los objetos de Javascript tienen tablas hash?
- 8. ¿Cómo funciona realmente la fusión de una rama (debajo del capó)?
- 9. ¿Cómo implementa Java el patrón de peso mosca para la cuerda debajo del capó?
- 10. Comprobación de PHP si el archivo está bloqueado con flock()?
- 11. Herencia bajo el capó
- 12. WPF: Color debajo del puntero
- 13. Arrastrar UIView debajo del dedo
- 14. ¿Cómo obtener la palabra debajo del cursor?
- 15. ¿Dónde está flock() para Perl en Windows?
- 16. Cómo ocultar el fondo debajo del borde
- 17. Vista del centro debajo de otra Vista
- 18. ¿Cómo obtener el control debajo del cursor del mouse?
- 19. Especificación del lenguaje PHP?
- 20. ¿Hay un lenguaje de programación "debajo" de la Asamblea?
- 21. organizando div uno debajo del otro
- 22. Registro de Python: ¿hay algo debajo de DEPURAR?
- 23. jQuery: elemento resaltado debajo del cursor del mouse?
- 24. Mac OS X equivalente al comando de Linux flock (1)
- 25. ¿Cómo funciona gmail bajo el capó?
- 26. Cómo hacer que un NSView sea transparente y muestre qué hay debajo de NSWindow?
- 27. ¿Hay una manera rápida de obtener el control que está debajo del mouse?
- 28. ¿Hay un atajo para buscar la palabra debajo del cursor en Xcode?
- 29. ¿Hay alguna manera de deshacer ventana dividida debajo en emacs?
- 30. ¿Realmente Node.js usa varios subprocesos debajo?
Semántica - Sí. ¿Pero realmente llama flock()? –
No puedo probarlo porque no estoy ejecutando una copia de PHP en este momento, pero lo creo, sí. ¿Por qué no probarlo usted mismo con strace? –
Solo tengo acceso FTP al servidor. –