# Concurrency

> Background work in Langoost with the thread module — spawn a goroutine, pass messages over a channel, and await an async future.

# Concurrency

Spawn background work and communicate over a channel. Each spawned function runs
in its own isolated VM.

```goost
import thread

// A buffered channel carrying messages between tasks
let ch = thread.channel.new(1)

thread.core.spawn(fn() {
    thread.channel.send(ch, "hello from a goroutine")
})

let msg = thread.channel.recv(ch)   // blocks until a value arrives
println(msg)
```

Or run a task and await its result with a future:

```goost
import thread
import time

let future = thread.async.run(fn() {
    time.timer.sleep(100)
    return "done"
})

println(thread.async.await(future))   // "done"
```

Because tasks don't share mutable state by default, use `runtime.core.share` /
`runtime.core.fetch` (guarded by a `thread.mutex` when needed) to coordinate.