It's not head
's fault; it's ls
's. ls
almost always sorts its output (by default, by name; if requested, by date). And it is in the nature of any sort that it cannot produce any output until it has read the entire input. find
does not sort its output, so it can start producing faster.
You could have seen this for yourself simply by running
ls
and
find
and observing the difference in response time.
BTW, you can get ls
to list directories without sorting by specifying -U
.