Difference between using "echo" builtin and /bin/echo

So in my shell i execute:

 { while true; do echo string; sleep 1; done } | read line 

This waits one second and returns.
But

 { while true; do /bin/echo string; sleep 1; done } | read line 

continues to run, and doesn't stop until i kill it explicitly.

I have tried this in bash as well as zsh, but the behaviour is the same. I wonder, why do these statements execute in such different manner? I understand, that in the first case right part of the pipe finishes after reading single line from its stdin, and terminates. Consequently, the interpretor terminates the whole pipe. But why does this scenario not apply to the second case?..

When a process that is on the left side of the pipe writes some output and the process on the right has exited, the SIGPIPE signal is passed to the left process. If it is not handled, the default shell behaviour is to terminate that process.
It seems that the echo builtin doesn't handle SIGPIPE signal, whereas /bin/echo ignores it.

Oh, thanks a lot for clearing things up. Now i can freely continue playing with that creamy piping :smiley: