aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2024-07-10 04:35:13 -0400
committerJunio C Hamano <gitster@pobox.com>2024-07-10 10:14:21 -0700
commita7c1c102562c141b752f06f94c99438fa80319e8 (patch)
treeb182042954996151d47eba3f1905289f26e03188
parenta5e450144dbc85b5cd7b0e01c6aa7fd30f117ee2 (diff)
downloadgit-a7c1c102562c141b752f06f94c99438fa80319e8.tar.gz
chainlint.pl: only start threads if jobs > 1
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>
-rwxr-xr-xt/chainlint.pl3
1 files changed, 2 insertions, 1 deletions
diff --git a/t/chainlint.pl b/t/chainlint.pl
index 1bbd985b78..1864d048ae 100755
--- a/t/chainlint.pl
+++ b/t/chainlint.pl
@@ -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;