git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/14] fork/exec removal series

From
Pierre Habouzit <madcoder@debian.org>
Date
Oct 14, 2007, 07:12 UTC
Message-ID
<20071014071239.GB1198@artemis.corp>
In-Reply-To
<20071014025857.GQ27899@spearce.org>
On Sun, Oct 14, 2007 at 02:58:57AM +0000, Shawn O. Pearce wrote:
Show 22 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > On Sat, 13 Oct 2007, Shawn O. Pearce wrote:
> > 
> > > Since builtin-pack-objects now accepts (limited) pthread support, 
> > > perhaps this should be implemented in terms of pthread support when 
> > > pthreads are available?
> > 
> > Falling back to fork() when no pthreads are available?  Yes, that makes 
> > sense.
> > 
> > It might also (marginally) speed up operations, since the switches between 
> > threads are cheaper than those between processes, right?
> 
> Usually.  If we have a large virtual address space (say due to
> opening a bunch of packfiles and reading commits out of them into
> struct commit* thingies) and the OS does a giant copy of the page
> tables during fork() then the pthread creation should be a heck of
> a lot cheaper.
> 
> But we most definately *must* continue to support fork() for the
> async functions.  Its the most common interface available on one
> of our biggest platforms (UNIX).
  Yeah that, and the fact that many of the git modules aren't
thread-safe (some modules have static buffers strbuf's or caching
variables) and should be used with care.
  The trivial way is to add a __thread keyword to make them TLS
variables, though, it's not really a step in the direction of
portability, and last time I looked at it, mingw didn't had TLS support,
not sure if msys has. Though, if Msys has, it's worth using, and we
could require that targets using the fancy pthread thingy should also
have some fancy TLS, or use fork().
  Portability for such issues, would be to use pthread_key_* and
pthread_{get,set}specific, and those are a hell of a sucky API.
-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org
Previous: Shawn O. PearceNext: Pierre Habouzit
Message 26 of 30 in “fork/exec removal series”
  1. 0/14 fork/exec removal seriesJohannes Sixt, Oct 13, 2007
  2. 01/14 Change git_connect() to return a struct child_process instead of a pid_t.Johannes Sixt, Oct 13, 2007
  3. 02/14 Use start_command() in git_connect() instead of explicit fork/exec.Johannes Sixt, Oct 13, 2007
  4. 03/14 Use start_command() to run content filters instead of explicit fork/exec.Johannes Sixt, Oct 13, 2007
  5. 04/14 Use run_command() to spawn external diff programs instead of fork/exec.Johannes Sixt, Oct 13, 2007
  6. 05/14 Use start_comand() in builtin-fetch-pack.c instead of explicit fork/exec.Johannes Sixt, Oct 13, 2007
  7. 06/14 Have start_command() create a pipe to read the stderr of the child.Johannes Sixt, Oct 13, 2007
  8. 07/14 upload-pack: Use start_command() to run pack-objects in create_pack_file().Johannes Sixt, Oct 13, 2007
  9. 08/14 Add infrastructure to run a function asynchronously.Johannes Sixt, Oct 13, 2007
  10. 09/14 Use the asyncronous function infrastructure in builtin-fetch-pack.c.Johannes Sixt, Oct 13, 2007
  11. 10/14 upload-pack: Move the revision walker into a separate function.Johannes Sixt, Oct 13, 2007
  12. 11/14 upload-pack: Run rev-list in an asynchronous function.Johannes Sixt, Oct 13, 2007
  13. 12/14 t0021-conversion.sh: Test that the clean filter really cleans content.Johannes Sixt, Oct 13, 2007
  14. 13/14 Avoid a dup2(2) in apply_filter() - start_command() can do it for us.Johannes Sixt, Oct 13, 2007
  15. 14/14 Use the asyncronous function infrastructure to run the content filter.Johannes Sixt, Oct 13, 2007
  16. Johannes SchindelinOct 14, 2007
  17. Johannes SixtOct 14, 2007
  18. 14/14 Use the asyncronous function infrastructure to run the content filter.Johannes Sixt, Oct 14, 2007
  19. 08/14 Add infrastructure to run a function asynchronously.Johannes Sixt, Oct 14, 2007
  20. Johannes SchindelinOct 14, 2007
  21. Johannes SixtOct 14, 2007
  22. Johannes SchindelinOct 14, 2007
  23. Shawn O. PearceOct 14, 2007
  24. Johannes SchindelinOct 14, 2007
  25. Shawn O. PearceOct 14, 2007
  26. Pierre HabouzitOct 14, 2007
  27. Pierre HabouzitOct 14, 2007
  28. Pierre HabouzitOct 14, 2007
  29. Andreas EricssonOct 14, 2007
  30. Johannes SchindelinOct 14, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.