For some reason, this raised my curiosity how fast different languages write individual characters to a pipe:
PHP comes in at about 900KiB/s:
php -r 'while (1) echo 1;' | pv > /dev/null
Python is about 50% faster at about 1.5MiB/s:
python3 -c 'while (1): print (1, end="")' | pv > /dev/null
Javascript is slowest at around 200KiB/s:
node -e 'while (1) process.stdout.write("1");' | pv > /dev/null
What's also interesting is that node crashes after about a minute:
FATAL ERROR: Ineffective mark-compacts
near heap limit Allocation failed -
JavaScript heap out of memory
All results from within a Debian 10 docker container with the default repo versions of PHP, Python and Node.
Update:
Checking with strace shows that Python caches the output:
strace python3 -c 'while (1): print (1, end="")' | pv > /dev/null
Outputs a series of:
write(1, "11111111111111111111111111111111"..., 8193) = 8193
PHP and JS do not.
So the Python equivalent would be:
python3 -c 'while (1): print (1, end="", flush=True)' | pv > /dev/null
Which makes it compareable to the speed of JS.
Interesting, that PHP is over 4x faster than the Python and JS.
PHP comes in at about 900KiB/s:
Python is about 50% faster at about 1.5MiB/s: Javascript is slowest at around 200KiB/s: What's also interesting is that node crashes after about a minute: All results from within a Debian 10 docker container with the default repo versions of PHP, Python and Node.Update:
Checking with strace shows that Python caches the output:
Outputs a series of: PHP and JS do not.So the Python equivalent would be:
Which makes it compareable to the speed of JS.Interesting, that PHP is over 4x faster than the Python and JS.