Un servidor Apache que se ejecuta en modo de multiproceso worker, crea un cierto número de procesos hijo para atender las solicitudes entrantes. A su vez, cada uno de los procesos ejecuta varios threads entre los que distribuye la carga. Para optimizar el uso de recursos disponibles, hay que configurar adecuadamente el número de procesos y threads que se ejecutan en el servidor.
La instalación de red más habitual de una máquina virtual (VM) de VirtualBox es NAT (Network Address Translation).
En esta configuración, la VM tiene su propia dirección IP, y puede conectarse al host y a otras máquinas en la red externa, pero por defecto éstas no pueden conectarse a la máquina virtual.
El servidor web Apache puede utililizar distintas estrategias de multiproceso para aprovechar las posibilidades de un servidor equipado con varios procesadores. De entre ellas, las más habituales son los módulos de multiproceso (mpm) “prefork” y “worker”:
Al ejecutar una sentencia INSERT de más de un registro sobre una tabla con clave única, puede ocurrir que alguno de los registros a insertar tenga el mismo valor de la clave que otro registro ya existente en la tabla. Por defecto, esto hace que la sentencia entera falle con un mensaje de error “execute failed: Duplicate entry”. En este caso, no se inserta ningún registro, ni siquiera los que tienen claves que no están en conflicto con los registros existentes previamente.
Durante mucho tiempo, PHP ha carecido de la funcionalidad para escribir programas con varios hilos de ejecución simultáneos.
Actualmente, es posible instalar un intérprete de PHP con soporte para pthreads (POSIX threads) aunque las distribuciones estándard de PHP no lo incluyen. Para conseguirlo es necesario compilar el intérprete a partir del código fuente, incluyendo la opción “–enable-maintainer-zts” (–enable-zts en Windows). Pero esto sólo sirve para que el intérprete sea “thread-safe” y funcione bajo un servidor Apache con multithreading (Worker MPM), en vez de en un servidor Apache multiproceso (Pre-fork MPM). Por otra parte, se suele desaconsejar este tipo de instalación, porque aunque el núcleo de PHP sea thread-safe, puede que cualquiera de la extensiones que se utilicen no lo sea.
En este artículo vamos a explorar las distintas posibilidades para la implementación de scripts multihilo en PHP, y las consideraciones que hay que tener en cuenta al hacerlo.
Un caso típico en donde puede ser necesario establecer un tiempo límite de respuesta es el de un servidor que se comunica con uno o varios clientes a través de la red.
El servidor envía mensajes a los clientes, y espera a que éstos respondan. Pero puede haber problemas de red, o bien alguno de los clientes no responde por alguna otra razón, y esto no debe bloquear la ejecución del servidor para el resto de los clientes.
La función “alarm” de perl permite ejecutar una subrutina cuando ha transcurrido el tiempo que se le ha indicado como argumento.
Haciendo uso de ella, podemos implementar una función para solicitar una respuesta al usuario, pero si éste no responde pasado un tiempo, continúa la ejecución del script.
El código de esta función es el siguiente:
Mediante la programación multihilo, un programa puede ejecutar simultáneamente distintas tareas, optimizando el uso de los recursos disponibles en el sistema y disminuyendo el tiempo total de ejecución. Así, mientras un hilo puede estar ejecutando un proceso intensivo de cálculo, otro hilo puede estar realizando una operación de entrada/salida a disco. Un tercer hilo puede estar realizando una consulta a una base de datos que quizá reside en otro servidor, y un cuatro hilo puede estar descargando contenidos de la red.
En este artículo vamos a revisar los conceptos básicos de la programación multihilo y vamos a ver ejemplo de implementación en lenguaje Perl.
Una red domótica KNX puede conectarse a una red IP mediante un dispositivo denominado IP Router.
El IP router se comunica con un servidor externo mediante el intercambio de paquetes UDP. Los paquetes intercambiados incluyen un “identificador de sesión” (channelid), y están numerados, de manera que un paquete con un número fuera de secuencia es descartado.
En este artículo analizamos los paquetes intercambiados entre un servidor eibd y un IP router implementado en software ( ”tweety”). Además, simulamos el envío de órdenes mediante el comando groupswrite que se incluye en la distribución de eibd.
Conforme ha ido evolucionando su desarrollo, han aparecido distintas versiones del sistema operativo Android. Cada nueva versión corrije errores, incorpora mejoras de rendimiento, añade nuevas funcionalidades y soporta nuevos dispositivos, como los tablets. Las versiones del sistema tienen un identificador numérico (p.ej., 2.3.5), y también un nombre (Froyo, Gingerbread,…)
En paralelo, el API de programación ha ido evolucionando para dar acceso a las nuevas funcionalidades presentes en las nuevas versiones. Las versiones del API se identifican simplemente con un número entero (API 10, API 16,…)
Pero no existe una correspondencia uno a uno entre una versión del sistema y una versión del API. La siguiente tabla presenta la correspondencia entre versiones del sistema y del API: