Re: Using Threads?

From: Bruce Guenter <bruceg(at)em(dot)ca>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Using Threads?
Date: 2000-12-04 23:17:04
Message-ID: 20001204171704.A32314@em.ca
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Dec 04, 2000 at 03:17:00PM -0800, Adam Haberlach wrote:
> Typically (on a well-written OS, at least), the spawning of a thread
> is much cheaper then the creation of a new process (via fork()).

Unless I'm mistaken, the back-end is only forked when starting a new
connection, in which case the latency of doing the initial TCP tri-state
and start-up queries is much larger than any process creation cost. On
Linux 2.2.16 on a 500MHz PIII, I can do the fork/exit/wait sequence in
about 164us. On the same server, I can make/break a PostgreSQL
connection in about 19,000us (with 0% CPU idle, about 30% CPU system).
Even if we can manage to get a thread for free, and assume that the fork
from postmaster takes more than 164us, it won't make a big difference
once the other latencies are worked out.

> Also, since everything in a group of threads (I'll call 'em a team)

Actually, you call them a process. That is the textbook definition.

> shares the
> same address space, there can be some memory overhead savings.

Only slightly. All of the executable and libraries should already be
shared, as will all non-modified data. If the data is modified by the
threads, you'll need seperate copies for each thread anyways, so the net
difference is small.

I'm not denying there would be a difference. Compared to seperate
processes, threads are more efficient. Doing a context switch between
threads means there is no PTE invalidations, which makes them quicker
than between processes. Creation would be a bit faster due to just
linking in the VM to a new thread rather than marking it all as COW.
The memory savings would come from reduced fragmentation of the modified
data (if you have 1 byte modified on each of 100 pages, the thread would
grow by a few K, compared to 400K for processes). I'm simply arguing
that the differences don't appear to be significant compared to the
other costs involved.
--
Bruce Guenter <bruceg(at)em(dot)ca> http://em.ca/~bruceg/

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Matthew 2000-12-04 23:48:36 RE: Using Threads?
Previous Message Adam Haberlach 2000-12-04 23:17:00 Re: Using Threads?