> From: Dirk Gouders <dirk@xxxxxxxxxxx> > Cc: Colin Watson <cjwatson@xxxxxxxxxx>, Eli Zaretskii <eliz@xxxxxxx>, > linux-man@xxxxxxxxxxxxxxx, help-texinfo@xxxxxxx, > nabijaczleweli@xxxxxxxxxxxxxxxxxx, g.branden.robinson@xxxxxxxxx, > groff@xxxxxxx > Date: Sat, 08 Apr 2023 21:48:13 +0200 > > $ find /usr/share/man -type f -exec bzgrep -l RLIMIT_NOFILE {} \; > /usr/share/man/man1/runuser.1.bz2 > /usr/share/man/man1/su.1.bz2 > /usr/share/man/man1/nghttpx.1.bz2 > /usr/share/man/man3/getdtablesize.3.bz2 > /usr/share/man/man3/mq_open.3.bz2 > /usr/share/man/man3/errno.3.bz2 > /usr/share/man/man3/sysconf.3.bz2 > /usr/share/man/man3p/getrlimit.3p.bz2 > /usr/share/man/man3p/sysconf.3p.bz2 > /usr/share/man/man3p/posix_spawn_file_actions_addclose.3p.bz2 > /usr/share/man/man0p/sys_resource.h.0p.bz2 > /usr/share/man/man2/pidfd_open.2.bz2 > /usr/share/man/man2/poll.2.bz2 > /usr/share/man/man2/getrlimit.2.bz2 > /usr/share/man/man2/open.2.bz2 > /usr/share/man/man2/select.2.bz2 > /usr/share/man/man2/fcntl.2.bz2 > /usr/share/man/man2/seccomp_unotify.2.bz2 > /usr/share/man/man2/dup.2.bz2 > /usr/share/man/man2/pidfd_getfd.2.bz2 > /usr/share/man/man7/fanotify.7.bz2 > /usr/share/man/man7/capabilities.7.bz2 > /usr/share/man/man7/unix.7.bz2 > /usr/share/man/man5/proc.5.bz2 > > Yes, it's very slow but close to `man -K`: > > find... man -K... > > real 107.45 real 96.34 > user 117.06 user 70.11 > sys 14.43 sys 26.86 > > [a thought later] > > Oh, I found something much faster: > > $ time -p find /usr/share/man -type f | xargs bzgrep -l RLIMIT_NOFILE > [snip] > > real 24.30 > user 32.34 > sys 6.84 > > Hmm, perhaps, someone has an explanation for this? Multiprocessing, obviously. Your CPU has more than one execution unit, so the pipe via xargs runs 'find' and 'bzgrep' in parallel on two different execution units. By contrast, "find -exec" runs them sequentially, in a single thread.