Menú
Gratis
Registro
hogar  /  Programas/ Programación multiproceso en PHP utilizando Pthreads Translation. Subprocesamiento múltiple en PHP: pthreads Hilo de discusión anémico php

Programación PHP multiproceso con Pthreads Translation. Subprocesamiento múltiple en PHP: pthreads Hilo de discusión anémico php

Recientemente probé pthreads y me sorprendió gratamente: esta es una extensión que agrega la capacidad de trabajar con varios hilos reales a PHP. Sin emulación, sin magia, sin falsificaciones: todo es real.



Estoy viendo este problema. Hay un grupo de tareas que deben completarse rápidamente. PHP tiene otras herramientas para resolver este problema, no se mencionan aquí, el artículo trata sobre pthreads.



¿Qué es pthreads?

¡Eso es todo! Bueno, casi todo. De hecho, hay algo que puede inquietar al lector inquisitivo. Nada de esto funciona en PHP estándar compilado con opciones predeterminadas. Para disfrutar de subprocesos múltiples, debe tener habilitado ZTS (Zend Thread Safety) en su PHP.

configuración PHP

A continuación, PHP con ZTS. No prestes atención a esto gran diferencia en tiempo de ejecución en comparación con PHP sin ZTS (37,65 frente a 265,05 segundos), no intenté denominar en común la configuración de PHP. En el caso sin ZTS, tengo habilitado XDebug por ejemplo.


Como puedes ver, al usar 2 hilos, la velocidad de ejecución del programa es aproximadamente 1,5 veces mayor que en el caso de un código lineal. Cuando se usan 4 hilos, 3 veces.


Puede notar que a pesar de que el procesador es de 8 núcleos, el tiempo de ejecución del programa casi no cambió si se usaron más de 4 subprocesos. Parece que esto se debe al hecho de que mi procesador tiene núcleos físicos 4. Para mayor claridad, representé una placa en forma de diagrama.


Resumen

PHP permite subprocesos múltiples bastante elegantes utilizando la extensión pthreads. Esto da un aumento notable del rendimiento.

Etiquetas: Agregar etiquetas

A veces, es necesario realizar varias acciones al mismo tiempo, por ejemplo, verificar cambios en una tabla de base de datos y realizar modificaciones en otra. Además, si una de las operaciones (por ejemplo, verificar cambios) lleva mucho tiempo, es obvio que la ejecución secuencial no proporcionará el equilibrio de recursos.

Para resolver tales problemas, la programación utiliza subprocesos múltiples: cada operación se coloca en un subproceso separado con una cantidad dedicada de recursos y funciona dentro de él. Con este enfoque, todas las tareas se realizarán por separado e independientemente.

Aunque PHP no admite subprocesos múltiples, existen varios métodos para emularlo, que se analizarán a continuación.

1. Ejecutar varias copias del script: una copia por operación

//mujer.php if (!isset($_GET["hilo"])) ( system("wget ​​​​http://localhost/woman.php?thread=make_me_happy"); system("wget ​​​​http: //localhost/ mujer.php?hilo=hacerme_rico"); ) elseif ($_GET["hilo"] == "hacerme_feliz") ( hacer_su_feliz(); ) elseif ($_GET["hilo"] == "hacerme_rico" ) ( encontrar_otro_uno( ); )

Cuando ejecutamos este script sin parámetros, inicia automáticamente dos copias de sí mismo, con ID de operación ("thread=make_me_happy" y "thread=make_me_rich"), que inician la ejecución de las funciones necesarias.

Por lo tanto, logramos el resultado deseado: se realizan dos operaciones simultáneamente, pero esto, por supuesto, no es multiproceso, sino simplemente una muleta para realizar tareas simultáneamente.

2. Path of the Jedi - usando la extensión PCNTL

PCNTL es una extensión que le permite trabajar completamente con procesos. Además de la gestión, admite el envío de mensajes, la verificación del estado y el establecimiento de prioridades. Así es como se ve el script anterior usando PCNTL:

$pid = pcntl_fork(); if ($pid == 0) (hacer_feliz(); ) elseif ($pid > 0) ( $pid2 = pcntl_fork(); if ($pid2 == 0) (encontrar_otro_uno(); ) )

Parece bastante confuso, vamos línea por línea.

En la primera línea, "bifurcamos" el proceso actual (bifurcación - copiando el proceso de guardar los valores de todas las variables), dividiéndolo en dos procesos (actual y secundario) que se ejecutan en paralelo.

Para entender dónde estamos este momento, en un proceso secundario o principal, pcntl_fork devuelve 0 para el secundario y el ID de proceso para el principal. Por lo tanto, en la segunda línea, miramos $pid, si es cero, entonces estamos en el proceso secundario: ejecutamos la función; de lo contrario, estamos en el padre (línea 4), luego creamos otro proceso y realizamos la tarea de la misma manera.

Proceso de ejecución del script:

Por lo tanto, el script crea 2 procesos secundarios más, que son copias de él, contienen las mismas variables con valores similares. Y con la ayuda del identificador devuelto por la función pcntl_fork, somos guiados en qué flujo nos encontramos actualmente y realizamos las acciones necesarias.

Parece que los desarrolladores de PHP rara vez usan el paralelismo. No hablaré sobre la simplicidad del código sincrónico, la programación de un solo subproceso es, por supuesto, más simple y clara, pero a veces un poco de uso del paralelismo puede generar un aumento notable del rendimiento.

En este artículo, veremos cómo se puede lograr el subprocesamiento múltiple en PHP usando la extensión pthreads. Esto requerirá una versión ZTS (Zend Thread Safety) de PHP 7.x instalada, junto con extensión instalada pthreadsv3. (Al momento de escribir, en PHP 7.1, los usuarios deberán instalar desde la rama maestra en el repositorio de pthreads; consulte la extensión de terceros).

Una pequeña aclaración: pthreads v2 es para PHP 5.x y ya no es compatible, pthreads v3 es para PHP 7.x y se está desarrollando activamente.

Después de tal digresión, ¡vamos al grano!

Manejo de tareas únicas

A veces, desea procesar tareas únicas en una forma de subprocesos múltiples (por ejemplo, ejecutar alguna tarea vinculada a E/S). En tales casos, puede usar la clase Thread para crear un nuevo hilo y ejecutar algún procesamiento en un hilo separado.

Por ejemplo:

$tarea = nueva clase extiende Thread ( $respuesta privada; ejecución de función pública() ( $contenido = file_get_contents("http://google.com"); preg_match("~ (.+)~", $contenido, $coincidencias); $esto->respuesta = $coincidencias; ) ); $tarea->inicio() && $tarea->join(); var_dump($tarea->respuesta); // cadena (6) "googlear"

Aquí, el método de ejecución es nuestro procesamiento que se realizará dentro del nuevo hilo. Cuando se llama a Thread::start, se genera un nuevo hilo y se llama al método de ejecución. Luego, unimos el subproceso generado al subproceso principal llamando a Thread::join , que se bloqueará hasta que el subproceso generado haya terminado de ejecutarse. Esto asegura que la tarea termine de ejecutarse antes de que intentemos generar el resultado (que se almacena en $tarea->respuesta).

Puede que no sea deseable contaminar una clase con responsabilidades adicionales relacionadas con la lógica de subprocesos (incluida la responsabilidad de definir un método de ejecución). Podemos aislar tales clases derivando de la clase Threaded. Luego se pueden ejecutar dentro de otro hilo:

Class Task extiende Threaded ( public $response; public function someWork() ( $contenido = file_get_contents("http://google.com"); preg_match("~ (.+) ~", $contenido, $coincidencias); $ this->response = $coincidencias; ) ) $tarea = nueva tarea; $subproceso = nueva clase($tarea) extiende Subproceso ( $tarea privada; public function __construct(Subproceso $tarea) ( $esto->tarea = $tarea; ) public function ejecutar() ( $esto->tarea->algunTrabajo( ); ) ); $hilo->inicio() && $hilo->join(); var_dump($tarea->respuesta);

Cualquier clase que deba ejecutarse en un subproceso separado, debe heredar de la clase Threaded. Esto se debe a que brinda las capacidades necesarias para realizar el procesamiento en diferentes subprocesos, además de seguridad implícita e interfaces útiles (como la sincronización de recursos).

Echemos un vistazo a la jerarquía de clases proporcionada por la extensión pthreads:

Threaded (implementa Traversable, Collectable) Thread Worker Volatile Pool

Ya hemos cubierto y aprendido los conceptos básicos de las clases Thread y Threaded, ahora echemos un vistazo a las otras tres (Worker, Volatile y Pool).

Reutilización de hilos

Comenzar un nuevo subproceso para cada tarea que necesita paralelizarse es bastante costoso. Esto se debe a que la arquitectura "nada común" debe implementarse en pthreads para lograr subprocesos múltiples dentro de PHP. Lo que significa que todo el contexto de ejecución de la instancia actual del intérprete de PHP (incluidas todas las clases, interfaces, rasgos y funciones) debe copiarse para cada subproceso creado. Debido a que esto tiene un impacto notable en el rendimiento, un subproceso siempre debe reutilizarse siempre que sea posible. Los subprocesos se pueden reutilizar de dos maneras: con Worker s o con Pool s.

La clase Worker se usa para realizar una serie de tareas sincrónicamente dentro de otro hilo. Esto se hace creando una nueva instancia de Worker (que crea un nuevo hilo) y luego empujando tareas a la pila de ese hilo individual (usando Worker::stack).

Aquí hay un pequeño ejemplo:

Class Task extiende Threaded ( private $value; public function __construct(int $i) ($this->value = $i; ) public function run() ( usleep(250000); echo "Task: ($this->value) \n"; ) ) $trabajador = new Trabajador(); $trabajador->inicio(); for ($i = 0; $i pila(nueva Tarea($i)); ) while ($trabajador->recoger()); $trabajador->apagar();

En el ejemplo anterior, se envían 15 tareas a la pila para un nuevo objeto $worker a través del método Worker::stack y luego se procesan en el orden en que se enviaron. El método Worker::collect, como se muestra arriba, se usa para limpiar tareas tan pronto como hayan terminado de ejecutarse. Con él, dentro del ciclo while, bloqueamos el hilo principal hasta que se completan todas las tareas en la pila y hasta que se borran, antes de llamar a Worker::shutdown . La terminación anticipada de un trabajador (es decir, mientras todavía hay tareas por completar) bloqueará el subproceso principal hasta que todas las tareas hayan completado su ejecución, solo que las tareas no se recolectan basura (lo que implica pérdidas de memoria).

La clase Worker proporciona varios otros métodos relacionados con su pila de tareas, incluido Worker::unstack para eliminar la última tarea insertada y Worker::getStacked para obtener la cantidad de tareas en la pila de ejecución. La pila del trabajador contiene solo tareas que deben completarse. Una vez que se ha completado una tarea en la pila, se elimina y se coloca en una pila separada (interna) para la recolección de basura (usando el método Worker::collect).

Otra forma de reutilizar un subproceso para muchas tareas es usar un grupo de subprocesos (a través de la clase Pool). El grupo de subprocesos utiliza un grupo de trabajadores para permitir que se ejecuten las tareas simultáneamente, en el que el factor de simultaneidad (la cantidad de subprocesos del grupo en los que se ejecuta) se establece cuando se crea el grupo.

Adaptemos el ejemplo anterior para usar un grupo de trabajadores:

Class Task extiende Threaded ( private $value; public function __construct(int $i) ($this->value = $i; ) public function run() ( usleep(250000); echo "Task: ($this->value) \n"; ) ) $pool = new Pool(4); for ($i = 0; $i enviar(nueva Tarea($i)); ) while ($pool->collect()); $piscina->apagar();

Hay algunas diferencias notables cuando se usa un grupo en lugar de un trabajador. En primer lugar, el grupo no necesita iniciarse manualmente, comienza a ejecutar tareas tan pronto como estén disponibles. En segundo lugar, nosotros enviar tareas a la piscina, no ponerlos en una pila. Además, la clase Pool no se hereda de Threaded y, por lo tanto, no se puede pasar a otros subprocesos (a diferencia de Worker).

Como buena práctica, los trabajadores y los grupos siempre deben limpiar sus tareas tan pronto como las hayan completado y luego terminarlas ellos mismos manualmente. Los subprocesos creados con la clase Thread también deben adjuntarse al subproceso principal.

pthreads y (no) mutabilidad

La última clase que tocaremos es Volatile, una nueva adición a pthreads v3. La noción de inmutabilidad se ha convertido en un concepto importante en pthreads, ya que sin ella, el rendimiento cae significativamente. Por lo tanto, de forma predeterminada, las propiedades de las clases Threaded que son objetos Threaded ahora son inmutables y, por lo tanto, no se pueden sobrescribir después de que se asignaron originalmente. Actualmente se prefiere la mutabilidad explícita para tales propiedades, y aún se puede lograr con la nueva clase Volatile.

Echemos un vistazo a un ejemplo que demuestra las nuevas restricciones de inmutabilidad:

Class Task extiende Threaded // una clase Threaded ( función pública __construct() ($this->data = new Threaded(); // $this->data no se puede sobrescribir, ya que es una propiedad Threaded de una clase Threaded ) ) $tarea = nueva clase(nueva Tarea()) extiende Thread ( // una clase Threaded, ya que Thread extiende la función pública Threaded __construct($tm) ($this->threadedMember = $tm; var_dump($this->threadedMember-> data); // object(Threaded)#3 (0) () $this->threadedMember = new StdClass(); // inválido, ya que la propiedad es un miembro Threaded de una clase Threaded ) );

Las propiedades Threaded de las clases Volatile, por otro lado, son mutables:

Class Task extiende Volatile ( función pública __construct() ( $this->data = new Threaded(); $this->data = new StdClass(); // válido, ya que estamos en una clase volátil ) ) $tarea = new class(new Task()) extiende Thread ( public function __construct($vm) ($this->volatileMember = $vm; var_dump($this->volatileMember->data); // object(stdClass)#4 (0) () // todavía no es válido, ya que Volatile extiende Threaded, por lo que la propiedad sigue siendo un miembro Threaded de una clase Threaded $this->volatileMember = new StdClass(); ) );

Vemos que la clase Volatile anula la inmutabilidad impuesta por la clase principal Threaded para brindar la capacidad de cambiar las propiedades Threaded (así como unset() ).

Hay un tema más para discutir para cubrir el tema de la mutabilidad y la clase volátil: matrices. En pthreads, las matrices se convierten automáticamente en objetos volátiles cuando se asignan a una propiedad de la clase Threaded. Esto se debe a que simplemente no es seguro manipular una matriz desde múltiples contextos de PHP.

Veamos el ejemplo de nuevo para entender mejor algunas cosas:

$matriz = ; $tarea = nueva clase($matriz) extiende Thread ( $datos privados; función pública __construct(matriz $matriz) ( $esto->datos = $matriz; ) función pública ejecutar() ( $esto->datos = 4; $ esto->datos = 5; print_r($esto->datos); ) ); $tarea->inicio() && $tarea->join(); /* Salida: Objeto volátil ( => 1 => 2 => 3 => 4 => 5) */

Vemos que los objetos volátiles se pueden tratar como si fueran matrices, ya que admiten operaciones de matriz como (como se muestra arriba) el operador de subconjunto (). Sin embargo, las clases volátiles no admiten funciones de matriz básicas como array_pop y array_shift. En cambio, la clase Threaded nos proporciona operaciones similares a las de los métodos integrados.

Como demostración:

$data = nueva clase extiende Volatile ( public $a = 1; public $b = 2; public $c = 3; ); var_dump($datos); var_dump($datos->pop()); var_dump($datos->shift()); var_dump($datos); /* Salida: objeto( [correo electrónico protegido])#1 (3) ( ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ) int(3) int(1) objeto ( [correo electrónico protegido])#1 (1) ( ["b"]=> int(2) ) */

Otras operaciones admitidas incluyen Threaded::chunk y Threaded::merge .

Sincronización

En la última sección de este artículo, veremos la sincronización en pthreads. La sincronización es un método que le permite controlar el acceso a los recursos compartidos.

Por ejemplo, implementemos el contador más simple:

$contador = nueva clase extiende Thread ( public $i = 0; public function run() ( for ($i = 0; $i i; ) ) ); $contador->inicio(); for ($i = 0; $i i; ) $contador->join(); var_dump($contador->i); // imprime un número del 10 al 20

Sin el uso de la sincronización, la salida no es determinista. Múltiples subprocesos escriben en la misma variable sin acceso controlado, lo que significa que se perderán las actualizaciones.

Vamos a arreglarlo para que tengamos conclusión correcta 20, agregando sincronización:

$contador = nueva clase extiende Thread ( public $i = 0; public function run() ($this->synchronized(function() ( for ($i = 0; $i i; ) )); ) ); $contador->inicio(); $contador->sincronizado(función ($contador) ( for ($i = 0; $i i; ) ), $contador); $contador->join(); var_dump($contador->i); // int(20)

Los bloques de código sincronizados también pueden comunicarse entre sí mediante los métodos Threaded::wait y Threaded::notify (o Threaded::notifyAll).

Aquí hay un incremento alternativo en dos sincronizados mientras que los bucles:

$contador = nueva clase extiende Thread ( public $cond = 1; public function run() ($this->synchronized(function() ( for ($i = 0; $i notifico(); if ($this->cond === 1) ( $this->cond = 2; $this->wait(); ) ) )); ) ); $contador->inicio(); $contador->sincronizado(función ($contador) ( if ($contador->cond !== 2) ( $contador->esperar(); // espera a que el otro comience primero ) for ($i = 10; $i notifico(); if ($contador->cond === 2) ( $contador->cond = 1; $contador->espera(); ) ) ), $contador); $contador->join(); /* Salida: int(0) int(10) int(1) int(11) int(2) int(12) int(3) int(13) int(4) int(14) int(5) int( 15) int(6) int(16) int(7) int(17) int(8) int(18) int(9) int(19) */

Es posible que observe condiciones adicionales que se han colocado en torno a la llamada a Threaded::wait . Estas condiciones son críticas porque permiten que se reanude una devolución de llamada sincronizada cuando ha recibido una notificación y la condición especificada es verdadera. Esto es importante porque las notificaciones pueden provenir de otros lugares además de cuando se llama a Threaded::notify. Por lo tanto, si las llamadas al método Threaded::wait no estuvieran envueltas en condiciones, ejecutaríamos falsas llamadas de despertador, lo que conducirá a un comportamiento de código impredecible.

Conclusión

Examinamos las cinco clases en el paquete pthreads (Threaded, Thread, Worker, Volatile y Pool) y cómo se usa cada clase. También echamos un vistazo al nuevo concepto de inmutabilidad en pthreads, hicimos una breve descripción de las funciones de sincronización admitidas. Con estos conceptos básicos en su lugar, ahora podemos comenzar a ver cómo usar pthreads en casos del mundo real. Este será el tema de nuestro próximo post.

Si está interesado en la traducción de la próxima publicación, hágamelo saber: comente en las redes sociales. redes, votar y compartir la publicación con colegas y amigos.

discusión enhebrada

A discusión enhebrada es una discusión electrónica (como una a través de correo electrónico, lista de correo electrónico, tablón de anuncios, grupo de noticias o foro de Internet) en la que el software ayuda al usuario agrupando mensajes visualmente. Los mensajes generalmente se agrupan visualmente en una jerarquía por tema. Un conjunto de mensajes agrupados de esta manera se denomina hilo de tema o simplemente "hilo". Se dice que un foro de discusión, un cliente de correo electrónico o un cliente de noticias tiene "temas encadenados" si agrupa mensajes sobre el mismo tema para facilitar la lectura de esta manera. Además, las discusiones encadenadas generalmente permiten a los usuarios responder a una publicación particular dentro de la cadena de un tema. Como resultado, puede haber una jerarquía de discusiones dentro del tema de la cadena. Varios tipos de software pueden permitir que esta jerarquía se muestre en lo que está llamado modo enhebrado. (La alternativa es el modo lineal, que generalmente muestra todas las publicaciones en orden de fecha, independientemente de quién haya respondido específicamente a quién).

Ventajas

La ventaja de las vistas ordenadas jerárquicamente es que permiten al lector apreciar rápidamente la estructura general de una conversación: específicamente quién responde a quién. Como tal, es más útil en una situación con conversaciones o debates prolongados, como los grupos de noticias: de hecho, para un debate realmente complejo, rápidamente se vuelve imposible seguir el argumento sin algún tipo de sistema jerárquico de subprocesos.

Otro beneficio está en la apreciación más sutil de la comunidad en sistemas jerárquicamente subprocesos. Como las respuestas tienen que hacerse a publicaciones específicas, también se hacen a personas específicas. Por lo tanto, las conversaciones encadenadas tienden a centrar al escritor en los puntos de vista y la personalidad específicos del individuo al que se responde. Esto ocurre menos en foros en los que el último comentario se inserta en el grupo general.

Desventajas

Una desventaja del subprocesamiento jerárquico sobre el subprocesamiento plano es un mayor nivel de complicación y, por lo tanto, dicha vista requiere un mayor nivel de comodidad y sofisticación por parte de sus usuarios. Por lo tanto, no sorprende que su aceptación haya sido mayor en algunas de las comunidades en línea más antiguas y/o más sofisticadas, como Usenet, CIX o Slashdot. Los sistemas de chat y comentarios web son, en comparación, más recientes y están abiertos a un público más amplio y, como tal, los hilos jerárquicos se están convirtiendo en algo común recientemente en tales arenas.

La imposición de una jerarquía de árbol también tiende a fragmentar la discusión dentro de un tema: ya no es posible publicar un mensaje que responda o resuma varias publicaciones anteriores diferentes. En cambio, cada publicación anterior debe responderse individualmente. Es discutible que esto conduzca a un estilo de debate más confrontacional en foros que utilizan subprocesos jerárquicos. Sin embargo, aunque eso sea cierto, si una respuesta directa ya no es posible debido al volumen de respuestas a la publicación deseada, los usuarios ahora suelen usar citas de la persona a la que están respondiendo para mantener la conversación en curso y fluida. suavemente. Esto es recomendado por la mayoría de las comunidades de tableros de mensajes en el caso de que el hilo haya alcanzado su límite completo.

hilo abierto

Un hilo abierto se refiere a una publicación de blog donde los lectores pueden comentar y discutir cualquier tema que elijan. Suelen ser más útiles en blogs populares con mucho tráfico; a menudo se usan cuando el autor del blog no tiene un tema para publicar o cuando hay una pausa en la publicación.

Los hilos abiertos también se utilizan para romper la monotonía de las publicaciones en las páginas principales de los blogs. Los comentarios pueden acumularse en publicaciones orientadas al contenido; por lo tanto, los autores utilizan los hilos abiertos para que los tiempos de carga de la página no se retrasen.

Ejemplos

*Yahoo! grupos[ http://groups.yahoo.com/] , Grupos de MSN [ http://groups.msn.com/] y Slashdot [ http://www.slashdot.com/] todos ofrecen foros basados ​​en la web que presentan discusiones encadenadas.

ver también

* Escritura aérea académica
* Lista de términos de blogs

Referencias

* Boca de dardo. (2003). [ http://www.dartmouth.edu/~webteach/articles/discussion.html "Discusión en línea" ]
*Wolsey, T. DeVere, [ http://www.readingonline.org/articles/art_index.asp?HREF=wolsey/index.html "Discusión literaria en el ciberespacio: jóvenes adolescentes que usan grupos de discusión encadenados para hablar sobre libros] . "Reading Online", 7(4), enero/febrero de 2004. Consultado el 30 de diciembre de 2007.

Fundación Wikimedia. 2010 .

  • poder leon
  • barh azoum

Mira otros diccionarios:

    foro de Internet- El paquete de software phpBB Internet Forum, uno de los paquetes de foros más populares... Wikipedia

    Historia de los entornos virtuales de aprendizaje 1990- En la historia de los entornos de aprendizaje virtual, la década de 1990 fue una época de crecimiento, principalmente debido al advenimiento de la computadora asequible y de Internet.1990s1990* Formal Systems Inc. de Princeton, NJ, EE. UU. presenta una evaluación basada en DOS... ... Wikipedia

    Café- Entorno educativo colaborativo presencial Desarrollador(es) Consorcio LEAD Versión estable 5.0 / junio de 2010 Sistema operativo Multiplataforma... Wikipedia

    Hilo de conversación- es una función utilizada por muchos clientes de correo electrónico, tablones de anuncios, grupos de noticias o foros de Internet en los que el software ayuda al usuario agrupando visualmente los mensajes. Los mensajes generalmente se agrupan visualmente en una jerarquía por tema. Un conjunto de mensajes agrupados… … Wikipedia

    barra oblicua- Captura de pantalla de la URL de la página principal de Slashdot.org slashdot.org Slogan News para nerds. Cosas que importan... Wikipedia

    MediaWiki- el espacio de nombres vuelve a dirigir aquí. Para obtener ayuda sobre el espacio de nombres de MediaWiki en Wikipedia, consulte Ayuda: Espacio de nombres de MediaWiki. Para obtener información general sobre los espacios de nombres de Wikipedia, consulte Wikipedia: Espacio de nombres. La página de discusión y la página de discusión de MediaWiki redirigen aquí. Para… …Wikipedia

    comunicación por medio de ordenadores- Para otros usos, véase CMC (desambiguación). La comunicación mediada por computadora (CMC) se define como cualquier transacción comunicativa que ocurre mediante el uso de dos o más computadoras en red. Si bien el término se ha referido tradicionalmente a aquellos... ... Wikipedia

    Comparación de software wiki- Las siguientes tablas comparan la información general y técnica de varios paquetes de software wiki. Contenidos 1 Información general 2 Público objetivo 3 Características 1 4 Características 2 … Wikipedia

    Escritura aérea académica- es un término acuñado por el científico cognitivo Stevan Harnad que describe la combinación de varios correos electrónicos y un archivo web de hilos temáticos, como un grupo de noticias, una lista de correo electrónico, hipercorreo, noticias de la red o un foro de Internet, enlazado y clasificable por fecha,... ... Wikipedia

    software colaborativo para la toma de decisiones- El software de toma de decisiones en colaboración (CDM) es una aplicación o módulo de software que coordina las funciones y características necesarias para llegar a decisiones colectivas oportunas, lo que permite que todas las partes interesadas pertinentes participen en el proceso. La… …Wikipedia

La madre de mi buena amiga perdió su maleta en un vuelo de San Petersburgo a Moscú, y tenía otro vuelo a costas cálidas, y ahora ya está en el resort, sin traje de baño, sandalias y con una camiseta de equipaje de mano. De memoria, le di un par de consejos sobre qué hacer y dónde correr, y hoy decidí escribir aquí todo lo que sé sobre un tema determinado.

Para explicar por qué soy tan inteligente, permítame recordarle que en un momento trabajé en el manejo en tierra de varias aerolíneas, incluido el manejo de problemas individuales de rastreo de equipaje. Bueno, además de tu propia experiencia de vuelos, por supuesto. Sin embargo, desde Dejé la industria de servicios de aviación hace varios años, tal vez algunos matices podrían cambiar; si es así, aceptaré con gratitud los comentarios sobre el tema y corregiré la información en la publicación.

voy a empezar con lo que debes hacer para que tu equipaje NO se pierda:
1. Retire todas las etiquetas y calcomanías de viajes anteriores de la maleta, incluso las pequeñas con un código de barras, que a menudo se pegan por separado en la maleta; pueden confundir el sistema automático para escanear y clasificar el equipaje.
2. Cuelgue una etiqueta con su nombre en su maleta (bolsa, caja, bulto, en general, todo lo que facture en el equipaje) con una etiqueta con su nombre: puede comprar una opción reutilizable por adelantado o tomar una etiqueta de papel en el mostrador de facturación - por lo general todas las aerolíneas más o menos decentes los distribuyen sin restricciones. Y Emirates, por ejemplo, generalmente tiene excelentes etiquetas de plástico en un cable duradero que puede durar mucho tiempo:

Los viejos paranoicos pueden hacer como yo: siempre tengo una etiqueta de plástico reutilizable del conjunto Samsonite con mi domicilio permanente, número de teléfono y correo electrónico en mi maleta, y cuando vuelo a algún lugar de vacaciones, además cuelgo una etiqueta de papel en la que indico las fechas de estancia en un lugar nuevo y todo posibles contactos(el nombre y la dirección del hotel, su número de teléfono local, si lo tiene, y su nombre y apellido, por supuesto).
3. En el mostrador de facturación, asegúrese de que la etiqueta de equipaje que imprime el agente de facturación esté pegada en su equipaje, con el código de la ciudad a la que vuela y el número de vuelo.
4. Si tiene varios vuelos de conexión, informe al agente de facturación sobre esto y especifique hasta qué punto desea facturar su equipaje. En algunos casos, el equipaje deberá recogerse en uno u otro aeropuerto de la ruta, independientemente de su deseo: esto se aplica, por ejemplo, a los traslados entre aeropuertos (Orly y Charles de Gaulle en París, Domodedovo - Sheremetyevo) - " Vnukovo" en Moscú), terminales separadas (terminales 1 y 2 en Frankfurt) o en el primer punto de llegada a EE. la etiqueta de equipaje se emite para todos los tres segmentos a Phoenix, pero en Washington, el equipaje deberá recogerse físicamente, pasar por la aduana y volver a registrarse Además, si está facturando un buggy que se le permitió llevar a la pasarela, o un animal, es probable que deba recogerlo en un punto de tránsito. En general, en el caso de una ruta compleja con transferencias, es mejor aclarar de antemano los matices de los movimientos de equipaje en el centro de llamadas de la aerolínea o, en casos extremos, en el check-in.
5. Haga que su equipaje sea visible: no siempre es culpa de los transportistas o fallas en el sistema de clasificación lo que causa retrasos en el equipaje. A veces, otro pasajero distraído, cansado después de un largo vuelo, sacará de la cinta de equipaje el mismo samsonite negro o el mismo bolso de lona anodino que tienes tú. Por lo tanto, marque su equipaje: cuelgue un montón de cintas brillantes o un pequeño juguete de peluche en el asa, pegue una pegatina grande o simplemente dé preferencia a un color inusual en la etapa de elegir una maleta.

¿Qué no se debe facturar en el equipaje?
Recuerde, el equipaje se pierde en todas las aerolíneas y en todos los aeropuertos. Por supuesto, las estadísticas son diferentes para todos, pero incluso las aerolíneas más confiables e incluso el aeropuerto más pequeño pueden perder o retrasar el equipaje, donde un solo cargador llevará un carro con maletas directamente desde el mostrador de facturación hasta el avión. Por ello, te aconsejo llevar siempre en el equipaje de mano:
- documentos importantes, incluidos aquellos que no se necesitan durante el vuelo (por ejemplo, en mi último viaje a San Petersburgo, necesitaba cambiar mi licencia, y llevaba un certificado de matrimonio y todo tipo de tarjetas de una escuela de manejo en mi equipaje de mano)
- llaves (combinadas con una etiqueta con su dirección, esto puede ser peligroso)
- dinero, joyas (sin comentarios)
- equipos caros y frágiles
- medicamentos que tome regularmente, en la cantidad necesaria para el vuelo, y con un pequeño margen en caso de que tenga que buscar un análogo en un país o ciudad extranjera. Medicamentos recetados que serán imposibles de comprar en caso de pérdida de equipaje, lleve con usted en la cantidad necesaria para todo el viaje.
- algo que pueda necesitar con urgencia a su llegada (por ejemplo, un cargador para su teléfono
- algo que tiene un valor sentimental para ti personalmente: a veces el equipaje se pierde para siempre, y si la pérdida de un diario personal te rompe el corazón, es mejor dejarlo en casa o llevarlo contigo a la cabina

Una historia instructiva: durante mi trabajo en St. Petersburg Lufthansa, una pareja casada de los Estados Unidos corrió a nuestra oficina retorciéndose las manos; no tenían su equipaje, que contenía documentos muy importantes para el juicio de adopción, el tribunal fue el Día siguiente. Por supuesto, la aerolínea tiene la culpa de la pérdida de equipaje, pero ¿a quién le importa? Para evitar tal situación, bastaba con poner papeles importantes en el equipaje de mano.

Entonces, llegaste y no encontraste tu equipaje en la cinta de equipaje. ¿Qué hacer?
1. Si facturó algo que no sea maletas ordinarias: esquís, un violonchelo, una pantalla de plasma de pared completa, un cochecito, un perro de mármol vivo, verifique si hay un punto de recogida separado para los llamados. equipaje de gran tamaño o equipaje voluminoso: el equipaje, similar al que describí anteriormente, a menudo se carga en un compartimento separado y también se descarga manualmente por separado. Si su equipaje no se encuentra allí
2. Diríjase al mostrador de Lost & Found o Lost & Found. Allí deberá completar un formulario especial con información detallada sobre su equipaje: itinerario, apariencia, lista corta contenido, sus contactos en residencia permanente y residencia temporal. Además, en el servicio de rastreo de equipaje, es más probable que vea la siguiente tabla de equipaje:

Es de acuerdo con esta clasificación que se codificará su equipaje extraviado y, para que entienda, estas dos maletas se codificarán de la misma manera:

Así que siéntase libre de agregar más detalles en la descripción y no se salte la sección de contenido. Como regla general, cuando complete el informe de demora de equipaje por primera vez (informe de demora de equipaje), se le pedirá que indique varios elementos del contenido por los cuales se puede identificar su maleta si no hay marcas de identificación en el exterior y la maleta. habrá que abrirla (si se abre la bolsa, la pondrán dentro aviso de ello). Mal ejemplo: camiseta / libro / toallitas húmedas, buen ejemplo: bikini rojo brillante / catálogo de reproducciones de Malevich / hierro plegable. Después de llenar la solicitud, el oficial de rastreo de equipaje le dará un número en el formato XXXYY11111, donde XXX es el código del aeropuerto de llegada, YY es el código de la aerolínea de llegada + 5 dígitos del número de serie de la aplicación : por ejemplo, JFKLH12345, si voló con Lufthansa al aeropuerto Kennedy de Nueva York. Recuerde o anote este número; será la forma más fácil de encontrar su solicitud con más solicitudes.
Con el mismo número, usted mismo puede verificar el estado de la lista de buscados. (por alguna razón, el enlace vuela: si no funciona para usted, busque en Google World Tracer Online y, literalmente, el segundo enlace, con el título Seguimiento de equipaje en el sitio web worldtracer.aero, es lo que necesita), porque a menudo es muy difícil de alcanzar perdido y encontrado
3. Intente ponerse en contacto con la oficina de su aerolínea en el aeropuerto de llegada: a veces (enfatizo, ¡ALGUNAS VECES!) Si no llegó a su casa, sino a un lugar de estadía temporal (vacaciones, viaje de negocios), la aerolínea puede proporcionarle un set de aseo (Lufthansa lo tiene incluido camiseta oversize, Cepillo de dientes y pasta de dientes, peine, pequeños paquetes de champú y gel de ducha, una bolsa de detergente para la ropa, etc.) o hacer un pequeño pago en efectivo en el lugar para pequeños gastos (pago en efectivo al contado).

¿Qué pasará después?
Su archivo (llamado AHL) terminará en sistema centralizado búsqueda de equipaje (World Tracer). Todos los artículos de equipaje no reclamados caen en el mismo sistema de búsqueda, sin importar si se encontraron sin etiqueta en los rincones del patio de equipajes o permanecieron en la cinta de equipaje, también se crea un archivo del formato XXXYY11111 para cada uno de estos artículos, solo de una subespecie diferente: la llamada. informe disponible u OHD. Si los datos de los archivos AHL y OHD coinciden (apellido, descripción de la maleta, ruta, etc.), ambas estaciones (donde informaron la pérdida del equipaje y donde se encontró el equipaje sin reclamar) recibirán una notificación, y luego el Cuestión de tecnología: doble control y, en caso de éxito, reenvío del equipaje a la ciudad deseada. Por supuesto, también se lleva a cabo una gran cantidad de trabajo manual: enviar mensajes, rechazar maletas similares, pero no iguales, además de responder múltiples llamadas telefónicas. En general, los oficiales de rastreo de equipaje no se aburren.
Estadísticas aproximadas: más del 90% del equipaje perdido se encuentra en los primeros 3 días de búsqueda, el 3% se pierde para siempre.
¿Qué puedes hacer?
1. Si tiene que comprar algo que se necesita con urgencia a su llegada (desde un cepillo de dientes hasta un traje de negocios), asegúrese de guardar los recibos para una compensación posterior. Sin embargo, las compras costosas sin necesidad deben abandonarse, ¿por qué? Lo explicaré más adelante.
2. En pistas frescas, aprovecha al máximo lista detallada contenido, preferiblemente con color, marca y costo aproximado de cada artículo, idealmente en idioma en Inglés(porque de lo contrario el empleado de la aerolínea tendrá que traducir esta lista para ingresar al sistema), comuníquese con la aerolínea y envíeles esta lista, se agregará a la aplicación de búsqueda de equipaje. Durante los primeros 5 días, el aeropuerto de llegada se dedica a la búsqueda de equipaje, luego la búsqueda se transfiere a la aerolínea transportista (la aerolínea indicada en el número de solicitud, ¿recuerda JFKLH12345?), Y después de 21 días puede solicitar el indemnización definitiva.
3. Si transcurridos 21 días desde la fecha de presentación de la solicitud de pérdida de equipaje, no se ha encontrado, póngase en contacto con la compañía aérea transportista con una reclamación de indemnización. Si no me equivoco, el plazo de prescripción es de 2 años, es decir, Puede solicitar una compensación dentro de los dos años a partir de la fecha en que presentó su reclamo por pérdida.

Pago de indemnizaciones.
Para pagar la compensación, deberá presentarse en la oficina de representación de su aerolínea con una solicitud de pago, documentos que confirmen el vuelo y el hecho de la pérdida de equipaje (tarjetas de embarque, etiquetas de equipaje, número de reclamo de equipaje, detalles de pago). Si no me equivoco, en la Federación de Rusia, la decisión sobre la compensación debe considerarse legalmente dentro de los 30 días. También se le puede pedir que calcule el costo del contenido y, si es posible, proporcione los recibos de la compra de la maleta y las cosas que contiene (entiendo que esto no es realista en la mayoría de los casos, pero es parte del procedimiento).
Anteriormente, los pagos se realizaban en función del peso del equipaje facturado, unos 20 dólares por kilogramo. Posteriormente se cambió el sistema de liquidación y se limitó la responsabilidad de las compañías aéreas a 1.000 unidades convencionales (el valor de una unidad convencional se calcula dentro de la compañía aérea), que en el momento de mi trabajo correspondía a unos 1.300 euros. Aquellos. aunque lleves un cheque para comprar la maleta de Louis Vuitton, cosida con mil pieles de gecko bolivianas y rellena de diamantes, no te saldrán más de 1.300 euros.