2011-03-14 25 views
9

Estoy estudiando para el examen de certificación de PHP 5. Esta función fue mencionada en los exámenes de práctica. funciónModos de bloqueo y no bloqueo en PHP Streams

stream_set_blocking():

Conjuntos de bloqueo o modo de no bloqueo en una corriente.

Esta función es eficaz para cualquier corriente que soporta el modo no bloqueante (en la actualidad, los archivos normales y el zócalo corrientes).

Desde una perspectiva de alto nivel y bajo nivel, ¿cómo se comportan el modo de bloqueo y las secuencias de modo no-bloqueante en PHP? ¿Qué es un flujo de socket y un flujo sin socket? Los ejemplos son apreciados.

Respuesta

25

El modo de bloqueo/no bloqueo indica si las funciones de fread/fwrite volverán inmediatamente. Cuando están en non-blocking mode, devolverán todos los datos disponibles. Si no se pueden leer datos en el momento en que se invoca la función, no se devolverá ninguno. Tales flujos son típicos sondeados en un bucle.

En blocking mode sin embargo, la función será siempre esperar (y por lo tanto bloquear su ejecución programas) hasta que pueda satisfacer la petición de lectura completa. Si solicita leer 1MB de un conector de red, la función no regresará hasta que haya recibido 1MB para transmitir.

creo Wikipedia cubre bastante bien:
http://en.wikipedia.org/wiki/Berkeley_sockets#Blocking_vs._non-blocking_mode

En su mayoría tiene efecto sobre las fuentes de archivo/corriente en red. Para los sistemas de archivos locales, el sistema operativo siempre leerá la longitud de datos deseada. PHP también tiene stream wrappers, que puede manejar esa opción a su discreción (no hay una regla general confiable).

Para más detalles de bajo nivel, visite las páginas de manual de fnctl (2) o el zócalo (2) o
http://www.scottklement.com/rpg/socktut/nonblocking.html

+1

Muy útil, gracias! –

+0

impresionante, rocas – Muhammad