|Subject||Re: query-thread priority|
>There's a rudimentary scheduler inside and you see what MS says: whenDisclaimer: I have no knowledge of actual code of Firebird internals
> you run a long task, other clients have to wait.
(I'm still just a Firebird end-user) so this might not be applicable...
I think the difference is the usage of I/O completion ports. A
pre-emptive scheduler will interrupt a task repeatedly while
cooperative scheduling combined with I/O completion ports will only
interrupt a task when the task waits on an I/O call.
This can explain why currently a long Firebird (SS) query can dominate
the server...it does not yield to other tasks while waiting for I/Os
to complete. Of course an infinite loop with no I/O in a cooperative
scheduling scheme will still tie up the server...but not heavy
I/O...which dbmss are more subject to.
Or stated another way, I surmise that Firebird currently doesnt take
advantage of threads "not doing anything productive" because they are
waiting for I/O to finish, and it burns away CPU time in context
switches and cache issues by letting the OS interrupt its threads when
they have productive things to do.
Anyway, I think Firebird is still a few major versions away from
running out of "normal" improvements to do. In the meantime, I eagerly
anticipate Vulcan =)