If you have a lot of threads with things to do, then apparently asynchronous calls aren't necessarily better than synchronous calls because blocking threads just hand the rest of their time over to the next thread in line (if any) according to the answers to this question.
My question is when does windows decide a call is blocking? Presumably not every call to a database, file system or the tcp/ip stack is blocking, because otherwise all such calls would take at least 10 milliseconds to complete (because the thread would give up the rest of its time slice, which is around 10 milliseconds long). However, we certainly have database calls that take less time than that to complete.
So how does windows wait to determine whether a call is, indeed, blocking and how much time is lost determining that a call is, in fact, blocking (e.g. does windows use a small timeout to determine whether a database or other resource call is, in fact, blocking).
My real reason for asking is to better understand how it works so I can more clearly understand synchronous vs asynchronous call tradeoffs.