scala parallel-processing scala-collections

¿Cómo funcionan las colecciones paralelas de Scala 2.9 entre bastidores?



parallel-processing scala-collections (1)

Brevemente, hay dos aspectos ortogonales de cómo sus operaciones se paralizan:

  1. La medida en que su colección se divide en trozos (es decir, el tamaño de los trozos) para una operación paralelizable (como un map o filter )
  2. El número de subprocesos que se utilizarán para el grupo subyacente fork-join (en el que se ejecutan las tareas paralelas)

Para el # 2, esto es administrado por la propia agrupación, que descubre el nivel "ideal" de paralelismo en tiempo de ejecución (consulte java.lang.Runtime.getRuntime.availableProcessors )

Para el # 1, este es un problema aparte y la API de colecciones paralelas de scala lo hace a través del concepto de robo de trabajo ( programación adaptativa ). Es decir, cuando se realiza un trabajo en particular, un trabajador intentará robar el trabajo de otras colas de trabajo. Si no hay ninguno disponible, esto indica que todos los procesadores están muy ocupados y, por lo tanto, se debe realizar una gran cantidad de trabajo.

Aleksandar Prokopec, quien implementó la biblioteca, dio una charla en los ScalaDays de este año que estarán en línea en breve. También dio una gran charla en ScalaDays2010, donde describe en detalle cómo se dividen y se vuelven a unir las operaciones (¡hay una serie de problemas que no son evidentes de inmediato y algunos detalles encantadores también!).

Una respuesta más completa está disponible en el PDF que describe la API de colecciones paralelas .

Scala 2.9 introdujo colecciones paralelas. Son una herramienta realmente genial para ciertas tareas. Sin embargo, ¿cómo funcionan internamente y puedo influir en el comportamiento / configuración?

¿Qué método utilizan para averiguar el número óptimo de subprocesos? Si no estoy satisfecho con el resultado, ¿hay algún parámetro de configuración para ajustar?

No solo me interesa la cantidad de subprocesos que realmente se crean, sino también la forma en que se distribuye el trabajo real entre ellos. Cómo se recopilan los resultados y cuánta magia hay detrás de escena. ¿Scala prueba de alguna manera si una colección es lo suficientemente grande como para beneficiarse del procesamiento paralelo?