Re: "This method blocks until..." means what exactly?

On Mon, 2 Aug 2010, Arved Sandstrom wrote:

Nigel Wade wrote:
On 30/07/10 20:38, Screamin Lord Byron wrote:
On 30.07.2010 12:20, Nigel Wade wrote:

I infer "blocking" to imply:

a) no useful work is being performed
b) the duration is indeterminate (usually due to external factors)

whether it yields the CPU to other threads, or spins, isn't material to
the meaning of "blocked" - it may do either.

Wouldn't you say that a function which does some time consuming cryptographic computation (like generating long RSA keypairs) blocks if it doesn't return before the computation is finished?

No, I wouldn't.

To me, if it's actually performing its allotted task then it's running, not blocked. If it were blocked then it would be doing nothing, unable to perform it's required task (generally because it's waiting for some event to occur). That's why the term "blocked" is used (similar to when a road is blocked), it can't perform its function because something is preventing it. If it's running, doing what it's meant to do, I would not consider it blocked.

Yeah, but that's to "you". The general definition is simply that a blocking (synchronous) method does not return until it has finished its work, or it fails. That's it.

Evidence for this assertion, please.

I'm more or less with Nigel. I'm not bothered about whether the CPU is busy, or whether useful work is being done, but to me, blocking means that a method doesn't return *until some external actor causes it to*. The long-running cryptographic function is not blocking, because it doesn't require any external input to finish. A normal IO method is, because it can get stuck waiting for hardware.

It seems to me that if you call the cryptographic function blocking, then you have to call every function blocking, because no function returns before the computations it performs are finished (although i understand there's a Clojure extension for time-travel). That seems like a remarkably useless definition of the term.


What we learn about is not nature itself, but nature exposed to our
methods of questioning. -- Werner Heisenberg