James Findley wrote:
You're comparing the wrong thing here - I was demonstrating that
it
doesn't take noticeably longer to spawn awk than a small C app on modern
systems.
thus using:
for i in {1..1000}; do awk 'BEGIN{print "Hello World"}' > /dev/null;
done
for i in {1..1000}; do ./helloworld > /dev/null; done
we compare how long it takes to start a trivial C program 1000 times to
a trivial awk program 1000 times.
The bash for loop overhead is present in both cases, and since we are
only interested in the difference in speed, we can ignore it. (I
actually ran this comparison a number of times, and used the mean value)
You're comparing how long it takes to launch an awk program 1000 times
to how long it takes to run 1000 iterations of a loop in C. This is not
an especially useful thing to do.
Your comparison is the flawed one. The point of porting the shell code to C
is to invoke ONE C program instead of many awk, grep etc. subprocesses. All
the operations done by awk etc. would be done by native C code. So doing the
loop in C is very much consistent with what we want to accomplish.
IMHO replacing slow interpreted code by fast compiled code is always a good
idea, especially so if the interpreted code is shell code with its massive
abuse of process spawning.
Kevin Kofler