

Show HN: Parex – Simple Elixir module for parallel execution - hacker314159
https://github.com/StevenJL/parex

======
koudelka
The Task module is great for this kind of thing, too. [http://elixir-
lang.org/docs/v1.0/elixir/Task.html](http://elixir-
lang.org/docs/v1.0/elixir/Task.html)

    
    
      [
          add: fn() -> 1+2 end,
        hang1: fn() -> :timer.sleep(1000) end,
        hang2: fn() -> :timer.sleep(5000) end
      ]
      |> Enum.map(fn {k, t} ->
        {k, Task.async(t)}
      end)
      |> Enum.map(fn {k, t} ->
        {k, Task.await(t, :infinity)}
      end)

------
shepardrtc
So this is having a single (Erlang VM) process run code on as many cores as it
can? Is this designed for a sequential program so that you don't have to split
it up into processes? I'm still learning Erlang/Elixir, so I apologize if this
is a stupid question.

~~~
Xixi
Not the author, but if you read the code of the library (~35 LOC) you will
understand exactly what it does: it spawns a process (an Erlang process, not a
system process) for each of the task, and then gather the results in an array.

Whether the code is executed on many cores or not is completely orthogonal to
this library. Indeed it is a property of the Erlang VM: you can configure it
to run on only one system process, or many.

That said, if you are looking for computing performances, Erlang/Elixir is
probably not the language of choice: it is optimized for latency and fault
tolerance, not to maximize raw cpu usage.

------
whichdan
In your parallel code sample, hang2 is only 1000ms instead of 5000ms.

This is very cool though!

~~~
hacker314159
thanks for the catch!

------
asa400
Very cool. I love seeing stuff like this: simple things that illustrate how
easy it is to get going with concurrent programming in Elixir/Erlang.

