14

¿Cómo puede scala hacer que escribir programas de subprocesos múltiples sea más fácil que en java? ¿Qué puede hacer Scala (que Java no puede) para facilitar el aprovechamiento de múltiples procesadores?¿Qué ventajas tiene Scala sobre Java para la programación simultánea?

+4

Java puede hacer todo lo que Scala puede hacer, y viceversa. Ambos se ejecutan en la JVM, y ambos están completos, por lo que, por definición, cualquiera puede hacer las mismas cosas que la otra. La diferencia es lo que es más fácil o más natural en un idioma que el otro. – cHao

+0

@cHao @ Zan pregunta editada para tratar el problema con más detalle. :) –

Respuesta

6

Hay nada Scala hace que Java no lo haga. Eso sería tonto. Scala se ejecuta en la misma JVM que Java.

Lo que hace Scala hacer es más fácil escribir, más fácil de razonar y más fácil de depurar un programa multihilo.

Lo bueno de Scala para la concurrencia es su enfoque en objetos inmutables, su transmisión de mensajes y sus actores.

Esto le brinda datos de solo lectura de subprocesos de solo lectura, formas fáciles de pasar esos datos a otros subprocesos, y fácil uso de un grupo de subprocesos.

+2

Le agregaré cierres. Realmente hace mucho más fácil. –

+1

También agregaría que las continuaciones delimitadas realmente cambian el campo de juego para escribir programas concurrentes. Con suerte, el increíble soporte de la biblioteca aparece en unos meses. – jsuereth

13

Las reglas de concurrencia son

1 evitarlo si puedes

2 comparten nada si se puede objetos

3 comparten inmutables si se puede

4 tener mucho cuidado (y afortunado)

Para la regla 2 Scala ayuda al proporcionar un mensaje muy bien integrado que pasa la biblioteca de la caja en forma de los actores.

Para la regla 3 Scala ayuda a que todo sea inmutable por defecto.

Para la regla 4, la sintaxis flexible de Scala permite la creación de DSL internas, por lo que es más fácil y menos prolijo expresar lo que necesita de manera importante. es decir, menos lugar para sorpresas (si se hace bien)

+1

Creo que # 1 es cada vez más difícil de hacer. Yo diría que usar un marco, p. map-reduce o alguna biblioteca fork-join, puede ayudarlo a escribir programas concurrentes sin que parezca concurrente. – jsuereth

+0

Estoy de acuerdo. Definitivamente vale la pena examinar cuidadosamente sus necesidades y seleccionar patrones de simultaneidad que se ajusten a estos. Y luego use una biblioteca/marco depurado que implemente estos. –

+1

# 1 Necesita venir de la lista; más bien, deberíamos estar buscando activamente maneras de explotar los múltiples núcleos de CPU disponibles en las computadoras modernas. –

12

Si se toma Akka como base para la computación simultánea (y distribuida), se podría argumentar que la única diferencia es lo habitual que distingue a Scala de Java, ya que Akka tiene ambos Java y enlaces Scala para todas sus instalaciones.

Cuestiones relacionadas