Hacker News new | ask | show | jobs
by bananamogul 20 days ago
This article states multiple times that spinning up a process is expensive/very expensive. Is that really true? I ask out of ignorance.

“Compared to other ways of doing parallelism, processes are very expensive, both in terms of taking CPU resources but also the amount of time it takes to spin up a new process.”

“Because it’s expensive to spin up new processes, Postgres will only do this for long-running queries.”

Also:

“There’s been years of people talking about switching Postgres from a process model to a threading model, but nothing concrete has come out of that.”

I’ve read several times that on Linux, the cost between a process and a thread is relatively small.

3 comments

It’s all relative. It’s cheap if you think about spinning up new processes to run one off commands. It gets very expensive when you have to spawn it hundreds of times per second, and it can waste cpu cycles that could be used for query processing instead.
A process is significantly more expensive than a thread on a Linux system. The main cost is memory. Processes own their memory which forces the system to duplicate resources, as opposed to threads that are able to share resources.

Where have you red that "the cost between a process and a thread is relatively small."? I would be curious to see a link because the most cursory internet search would show you that it is not true.

"significantly more expensive" and "relatively small"

Well, both are true of course. You will have to put numbers on those to make sensible decisions.

Historically, creating processes in Linux has been cheaper than in other Unix-like OS (you might find results of an old Byte benchmark) and much cheaper than in Windows. Creating a thread will be undoubtedly cheaper still, but whether that will change the user experience or is worth the cost depends on details (how large the memory footprint is, pagesize, how many files are open, how many threads are to be executed, their lifetime, how many execution units are available, etc.).

It’s also important to distinguish between an os thread and a userspace thread. The author said “thread” without qualification, so I don’t know which he meant. Userspace threads can be many times lighter than processes.
I think tokio does userspace threads running on a thread per core. At least by default.