Tasks

Julia has a built-in system for running tasks, which are, in general, known as coroutines. With this, a computation that generates values (with a produce function) can be suspended as a task, while a consumer task can pick up the values (with a consume function). This is similar to the yield keyword in Python.

As a concrete example, let's take a look at a fib_producer function that calculates the first n Fibonacci numbers (refer to the Recursive functions section in Chapter 3, Functions), but it doesn't return the numbers, it produces them:

# code in Chapter 4\tasks.jl
function fib_producer(n)
    a, b = (0, 1)
    for i = 1:n
        produce(b)
        a, b = (b, a + b)
    end
end

If you call this function as fib_producer(5), it waits indefinitely. Instead you have ...

Get Julia: High Performance Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.