jaeyson

jaeyson

When to use async and sync code in Elixir?

Sorry for the very vague noob question, I really want to ask this:

When do we use async or sync code in the context of Elixir? AFAIK genserver call is synchronous which is blocking code. Do you have a real example or when do you decide which one to use? I’ve read these article When should I use asynchronous code in JavaScript? – Nico Zerpa, Your JavaScript Friend, but I haven’t found a good example when it is better to use sync over async and vice versa. Any help/enlightenment is greatly appreciated :pray:.

Most Liked

Maartz

Maartz

Hey! That’s a very good question.
I’ve found this post from elixirforum very interesting.

If it doesn’t answer your question, it should give you some clues to decide whether when you should use sync or async.
Hope it will help.

dewetblomerus

dewetblomerus

Great question @jaeyson

Sync Example

Imagine you want to read data from a source data store and write it to a destination data store. The requirements are not real-time. As long as the data arrives within 24 hours, everyone is happy.

Imagine the source data store will happily let you read 100,000 records per second.

Imagine the source data is bursty. Once per hour 1000,000 records show up in a few seconds and then nothing for the rest of the hour. And imagine the destination data store slows down when you make concurrent writes and it can’t handle batches larger than 1000 without spending much more money and re-architecture.

You can have a single Genserver responsible for writing to the destination.

Your code that consumes from the source data does not need to know anything about rate limiting or slowing down because it will receive back-pressure from the Genserver every time it tries to use call, which will block the process until it is done writing the batch to the destination.

Async example

Imagine you need to make 5 API requests and present a combination of all the data to the user. You could use Task.async to make all 5 requests, and after that, Task.await all of them.

If the Sync example is too slow

If you started with the sync example and you realize that you need to process faster, Elixir has a very deep toolbox for speeding things up by using an unbounded or configurable number of processes.

OvermindDL1

OvermindDL1

Something more simple:

Call a sync function when you want to wait on the result before doing more.

Call an async function when you want to do the call, do other stuff, then handle the result later, or if you don’t care about the result at all.

Where Next?

Popular Backend topics Top

DevotionGeo
I know that these benchmarks might not be the exact picture of real-world scenario, but still I expect a Rust web framework performing a ...
New
bot
A new item has been posted: This thread was posted automatically, if you feel it could be in a better category and are at Trust Level ...
New
New
New
ariandanim
Hello, i am facing difficult using webpack when to install within phoenix framework 1.5.7 because the webpack is still version 4.x.x inf...
New
finner
I’ve never really felt 100% comfortable using the enum type because of my lack of understanding how it is constructed . . . . . . until ...
New
AstonJ
In case anyone else is wondering why Ruby 3 doesn’t show when you do asdf list-all ruby :man_facepalming: do this first: asdf plugin-upd...
New
jaeyson
Sorry for the very vague noob question, I really want to ask this: When do we use async or sync code in the context of Elixir? AFAIK gen...
New
Reinis
I’ve been diving into Bridgetown (a Jekyll successor) and learning about writing a more maintainable CSS.
New
New

Other popular topics Top

PragmaticBookshelf
Stop developing web apps with yesterday’s tools. Today, developers are increasingly adopting Clojure as a web-development platform. See f...
New
PragmaticBookshelf
Machine learning can be intimidating, with its reliance on math and algorithms that most programmers don't encounter in their regular wor...
New
Exadra37
I am thinking in building or buy a desktop computer for programing, both professionally and on my free time, and my choice of OS is Linux...
New
AstonJ
Thanks to @foxtrottwist’s and @Tomas’s posts in this thread: Poll: Which code editor do you use? I bought Onivim! :nerd_face: https://on...
New
foxtrottwist
A few weeks ago I started using Warp a terminal written in rust. Though in it’s current state of development there are a few caveats (tab...
New
PragmaticBookshelf
Author Spotlight: VM Brasseur @vmbrasseur We have a treat for you today! We turn the spotlight onto Open Source as we sit down with V...
New
First poster: bot
zig/http.zig at 7cf2cbb33ef34c1d211135f56d30fe23b6cacd42 · ziglang/zig. General-purpose programming language and toolchain for maintaini...
New
PragmaticBookshelf
Develop, deploy, and debug BEAM applications using BEAMOps: a new paradigm that focuses on scalability, fault tolerance, and owning each ...
New
AstonJ
This is cool! DEEPSEEK-V3 ON M4 MAC: BLAZING FAST INFERENCE ON APPLE SILICON We just witnessed something incredible: the largest open-s...
New
xiji2646-netizen
Woke up to this today: Claude Code’s complete source code exposed via npm source map. Not a snippet. All 512,000 lines. 1,900 TypeScript ...
New