]> git.ipfire.org Git - thirdparty/git.git/commitdiff
chainlint.pl: only start threads if jobs > 1
authorJeff King <peff@peff.net>
Wed, 10 Jul 2024 08:35:13 +0000 (04:35 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 10 Jul 2024 17:14:21 +0000 (10:14 -0700)
If the system supports threads, chainlint.pl will always spawn worker
threads to do the real work. But when --jobs=1, this is pointless, since
we could just do the work in the main thread. And spawning even a single
thread has a high overhead. For example, on my Linux system, running:

  for i in chainlint/*.test; do
perl chainlint.pl --jobs=1 $i
  done >/dev/null

takes ~1.7s without this patch, and ~1.1s after. We don't usually spawn
a bunch of individual chainlint.pl processes (instead we feed several
scripts at once, and the parallelism outweighs the setup cost). But it's
something we've considered doing, and since we already have fallback
code for systems without thread support, it's pretty easy to make this
work.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/chainlint.pl

index 1bbd985b78dc37d9d1582dd36ccc1bcb1bf3eea9..1864d048aeeb78c6c61b9336e6093ce7fdf0545b 100755 (executable)
@@ -807,7 +807,8 @@ unless (@scripts) {
        exit;
 }
 
-unless ($Config{useithreads} && eval {
+unless ($jobs > 1 &&
+       $Config{useithreads} && eval {
        require threads; threads->import();
        require Thread::Queue; Thread::Queue->import();
        1;