¿Hay alguna manera para mí para compartir una variable entre dos web a los trabajadores? (Web de los trabajadores son, básicamente, los hilos en Javascript)

En lenguajes como c# tiene:

public static string message = "";
static void Main()
{
 message = "asdf";
 new Thread(mythread).Run();
}
public static void mythread()
{
 Console.WriteLine(message); //outputs "asdf"
}

Sé que eso es un mal ejemplo, pero en mi aplicación de Javascript, tengo un hilo haciendo pesados cálculos que se pueden difundir a través de múltiples hilos [ya que tengo una gran cantidad de datos en forma de matriz. Todos los elementos de la matriz son independientes el uno del otro. En otras palabras, mi subprocesos de trabajo no tienen que ocuparse de bloqueo ni nada de eso]

He encontrado la única manera de «compartir» una variable entre dos hilos de sería la creación de un Getter/setter [a través de la creación de prototipos] y, a continuación, utilizar postMessage/onmessage… aunque esto parece muy ineficiente [especialmente con los objetos, que tengo que usar JSON para AFAIK]

LocalStorage/Base de datos ha sido tomado de la especificación de HTML5, ya que podría resultar en interbloqueos, por lo que no es una opción [lamentablemente]…

La otra posibilidad que he encontrado fue el uso de PHP para tener realmente una getVariable.php y setVariable.php páginas, que el uso de localstorage para almacenar enteros/cadenas… una vez más, los Objetos [que incluye matrices/null] tienen que ser convertidos a JSON… y luego, más tarde, JSON.parse()’d.

Hasta donde yo sé, Javascript subprocesos de trabajo son totalmente aislado de la página principal del hilo [que es la razón por Javascript subprocesos de trabajo no podemos acceder a los elementos del DOM

Aunque postMessage obras, es lento.

Gracias!

OriginalEl autor Warty | 2010-02-14

4 Comentarios

  1. 9

    Web los trabajadores son deliberadamente compartido-nada-todo en un trabajador es totalmente oculta para el resto de los trabajadores y de las páginas en el navegador. Si había alguna manera de compartir no»atómica» valores entre los trabajadores, la semántica de los valores sería casi imposible de usar con resultados predecibles. Ahora, uno podría introducir los bloqueos como una manera de utilizar estos valores, que en cierta medida, usted adquirir el bloqueo, examinar y tal vez modificar el valor, a continuación, suelte el bloqueo — pero bloqueos son muy difíciles de utilizar, y desde el habitual modo de fallo es de interbloqueo usted sería capaz de «ladrillo» del navegador muy fácilmente. Eso no es bueno para los desarrolladores o usuarios (especialmente cuando se considera que el entorno web es tan susceptible a la experimentación por parte de los no-programadores que nunca hemos oído hablar de los hilos, cierres, o de paso de mensajes), por lo que la alternativa no es estado compartido entre los trabajadores o de las páginas en el navegador. Se puede pasar de mensajes (que uno puede pensar como la serialización «sobre el alambre» para el trabajador, que crea su propia copia de la original de valor basado en la información serializada) sin tener que solucionar alguno de estos problemas.

    Realmente, de paso de mensajes es la manera correcta de apoyo paralelismo sin dejar que los problemas de simultaneidad completamente fuera de control. Orquestar su mensaje de traspasos correctamente y usted debe tener todos los bits de tanto poder como si pudieras compartir el estado. Usted realmente no quiere que la alternativa que usted piensa que usted desea.

    Si había alguna manera de compartir no»atómica» valores entre los trabajadores, la semántica de los valores sería imposible de usar con resultados predecibles.<– Absolutamente mal en todos los sentidos.
    Atención a elaborar?
    Lamport panadería del algoritmo. Dijkstra vigilado comando de la lógica. Todo esto es específicamente para los no-determinista de la previsibilidad.
    Bien, «casi imposible», entonces. Es cierto que el intercambio no-simple de datos es muy fácil equivocarse, y por esa razón no es algo que se puede hacer con los web workers.
    Seguro. Dada la absoluta basura que contamina mucho de que el código en la web, creo que me estoy justificado en mi escepticismo hacia la web de los desarrolladores de habilidades para el uso de cualquier tipo de cosa correctamente.

    OriginalEl autor Jeff Walden

  2. 5

    No, pero usted puede enviar mensajes a la web de los trabajadores que pueden ser matrices, objetos, números, cadenas, booleanos, y ImageData o cualquier combinación de estos. Los Web workers puede enviar mensajes de vuelta también.

    OriginalEl autor Eli Grey

  3. 2

    Hay dos opciones para compartir los datos entre los trabajadores dedicados:

    1. Compartida De Los Trabajadores

    La SharedWorker interfaz representa un determinado tipo de trabajador que
    se puede acceder desde varios contextos de navegación, tales como varios de los
    windows, iframes o incluso de los trabajadores.

    El desove comparten un Trabajador en un Dedicado Trabajador

    2. Canal de la API de Mensajería

    El Canal de la API de Mensajería permite separar los dos scripts que se ejecutan en
    diferentes contextos de navegación conectados a la misma de documento (por ejemplo, dos
    IFrames, o el documento principal y un IFrame, dos documentos a través de una
    SharedWorker, o dos trabajadores) para comunicarse directamente, pasando
    los mensajes entre uno y otro a través de camino de dos canales (o tubos) con
    un puerto en cada extremo.

    Cómo llamar compartido trabajador de la web trabajador?

    Compartida de los trabajadores son trabajadores que pueden estar vinculados a una red de mensajes, en lugar de la mensajería simple árbol de trabajadores dedicados. Sin embargo, el principio básico de los trabajadores es cierto : no se puede compartir nada entre los trabajadores, sólo transmitir los mensajes.
    Pero la compatibilidad :/ developer.mozilla.org/en-US/docs/Web/API/…

    OriginalEl autor Warlock

Dejar respuesta

Please enter your comment!
Please enter your name here