¿Qué idioma es el más adecuado para hacer que varias computadoras funcionen en una tarea?

En gran medida, el lenguaje es irrelevante: las bibliotecas de codificación / decodificación de video generalmente se escriben en código nativo, por ejemplo, en C. Sin embargo, distribuir el trabajo en un clúster es “simplemente” una cuestión de llevar el trabajo a esas máquinas, tener las máquinas hacer el trabajo y luego reunir los resultados y unirlos. Esto es principalmente una cuestión de arquitectura.

Ahora, una transmisión de video en vivo, por ejemplo, no es un buen candidato para la computación distribuida ya que una sola máquina puede encargarse de todo el trabajo.

Se pueden asignar múltiples transmisiones de video en vivo a cada una a un hilo de cómputo de forma circular.

Sin embargo, si tiene un solo archivo de video sin procesar y desea codificarlo, entonces debe dividir el archivo en particiones de aproximadamente el mismo tamaño, generalmente en función del tiempo, dispersar esas particiones en un conjunto de recursos en un clúster y luego reúna los resultados finales y únalos en una sola máquina.

El diablo está en los detalles, por supuesto, como lidiar con fallas de un solo nodo o con procesos de codificación / decodificación de varios pasos, por ejemplo, hacer que el proceso de costura también se distribuya.

Hay varios tiempos de ejecución para la distribución de la carga de trabajo. A menudo, estos tiempos de ejecución admiten múltiples idiomas, más comúnmente lenguajes JVM como Scala y Java, así como también lenguajes Python y, a veces, .NET como C # y F #.

Algunos ejemplos de estos tiempos de ejecución incluyen Spark y Flink .

Estos se ejecutan sobre un sistema que gestiona y asigna recursos de clúster. Los dos jugadores principales en este campo son Mesos y YARN .

Además, necesita una fuente de datos para alimentar su grupo hambriento hambriento. HDFS, S3 y Kafka son fuentes de datos típicas para tales sistemas.

Creo que las respuestas hasta ahora, que dicen que la elección del idioma es irrelevante, son inexactas. Sí, la mayoría de los idiomas son de uso general, por lo que su arquitectura (y las bibliotecas / marcos disponibles) cuentan más. Pero hay un lenguaje que tiene características básicas apropiadas para su proyecto particular. Erlang

Características relevantes

  1. Soporte integrado y maduro para la informática distribuida resistente.
  2. Potente sintaxis para la manipulación de bits, la creación de archivos binarios y la coincidencia de patrones dentro de datos binarios.

Erlang se ha utilizado para aplicaciones comerciales de codificación / transmisión de video y existen bibliotecas de codificación / decodificación de código abierto de buena calidad. Por lo tanto, incluso si desea que la aplicación que ya tiene la mayor parte del trabajo sea realizada, Erlang se puede usar para extenderla / mejorarla / monitorearla.

Programación Erlang incluso tiene un capítulo sobre la construcción de un servidor ShoutCast 🙂

Erlang no es un lenguaje de propósito general, pero su proyecto puede estar dentro de su nicho.

He usado akka.io (java / scala) / akka.net (.net) una vez, y lo encontré notablemente fácil de usar.

Una vez que entendí el modelo de actor, no pude imaginar una mejor manera de distribuir la carga de trabajo a diferentes unidades de trabajo. Además de eso, akka define formas de manejar errores / fallas y equilibrio de carga.

Ahora, como nunca hice nada como una plataforma de codificación de video, no puedo decir si scala / java o .net traerán las herramientas adecuadas para tales tareas. Simplemente invocaría un codificador (piense si ffmpeg) y usaría el modelo de actor para comunicarme. También puede configurarlo como tener unos pocos trabajadores, que manejan videos largos y más trabajadores, que codifican videos más bien pequeños, para que el contenido más corto esté disponible más rápido (si esto fuera incluso un objetivo para usted).

No se trata de idiomas, y no creo que su enfoque vaya a funcionar.

La decodificación de video usa muy poco tiempo de CPU. La codificación de video consume más CPU, pero incluso las computadoras más modestas deberían poder hacerlo en tiempo real.

Puede escribir una aplicación que divida una cadena de video en 5 segmentos (alineándose en los límites del marco y falsificando los metadatos), enviarla a cinco computadoras para decodificar cada segmento por separado y luego escribir un programa para combinarlos.

Mucho trabajo (particularmente para hacer de manera confiable, por ejemplo, si una de las computadoras no está disponible) y sospecho que terminaría más lento de todos modos.

Si tiene acceso al código fuente, una mejor opción sería “enhebrar”. Básicamente, su computadora tiene al menos 4 núcleos (CPU) y el programa probablemente solo esté usando uno o dos de ellos. Potencialmente, puede cambiar el código para usar más núcleos, un proceso llamado “subprocesamiento”. Funciona en la mayoría de los idiomas.

Si no tiene acceso al código fuente, probablemente sea mejor que encuentre un codificador / decodificador de video diferente; la mayoría de estos funcionan mejor que en tiempo real.

More Interesting

Al eliminar un archivo, ¿por qué la computadora no puede volver a convertir los datos a 0? ¿No haría eso para que nadie pueda recuperar esos datos en lugar de esperar a que la computadora los sobrescriba en algún momento?

Cómo aprender a pensar como un programador de computadoras

¿Cuál es el papel de la concurrencia en la informática moderna?

¿Puedo usar un cable USB para conectar dos computadoras portátiles de modo que la entrada del teclado en una computadora portátil muestre la salida en el otro monitor?

¿Qué configuración prefiere, i5 7200U con Nvidia GeForce 940MX (2Gb) o simplemente un i7 7500U? El primero es $ 60 más barato.

¿Cómo funciona realmente un procesador? Cuando veo un chip de computadora, todo lo que veo son pequeños trozos de metal aleatoriamente clasificados. ¿Cómo este metal aleatoriamente clasificado realmente calcula físicamente las cosas?

¿Qué pasaría si fuera a una tienda y conecte un USB Killer a las computadoras portátiles que están encendidas? ¿Cuáles son las consecuencias? ¿Es posible tirar el USB y salirse con la suya? ¿Qué pasaría si reemplazara las memorias USB de almacenamiento con asesinos?

¿Cuál es la mejor computadora portátil en la India?

¿Cómo funciona la eliminación en Computadoras / Móviles?

¿Cuánta potencia usa la pantalla de una computadora cuando muestra una pantalla de inicio?

¿Qué quieres decir con amenazas informáticas?

¿Puede una batería nueva de computadora portátil morir repentinamente debido al sobrecalentamiento?

¿Qué procesos tienen lugar cuando enciendes la computadora?

¿Cuál es la configuración de la computadora de tus sueños?

Cómo describir los 3 tipos más comunes de virus informáticos