Asynchronous

Asynchronous Patterns for Ruby Based on Pure MRI CRuby code The goal is to use the original MRI C libs for achieve real async processing in ruby

This is good for where cpu focused for included, for example csv transformation

Example

Basic usage

require 'asynchronous'

thr = Asynchronous::Thread.new do
    "some expensive work"
end

thr.value #> "some expensive work"

With Syntax Sugar

require 'asynchronous/core_ext'

thr = async do
    "some expensive work"
end

thr.value #> "some expensive work"

Quoting Sun's Multithreaded Programming Guide:

Parallelism:

  • A condition that arises when at least two threads are executing simultaneously.

Concurrency:

  • A condition that exists when at least two threads are making progress.
  • A more generalized form of parallelism that can include time-slicing as a form of virtual parallelism

for short:

Concurrency is when two tasks can start, run, and complete in overlapping time periods. It doesn't necessarily mean they'll ever both be running at the same instant. Eg. multitasking on a single-core machine.

Parallelism is when tasks literally run at the same time. Eg. on a multicore processor.