Graeme Geldenhuys schrieb:

Looking at the rtl/unix/cthread.pp unit, I noticed two $Warning lines sayin
that setting or getting thread priority is not implemented for any unix
system.  WHAT???

I then thought I would go ahead and do the implementation. Seeing that
cthreads using libc and POSIX implementation, there was lots of docs about
it on the net, but the deeper I went the more confused I got.

In summary, this info is what I gathered so far:

* Linux thread priority is VERY confusing (compared to Windows).
* You have Static and Dynamic thread priority.
* You also have various Thread Scheduling priorities (different from
  thread priorities).
[...]

There exists a broad range of scheduler algorithms and implementations, that can vary even with customized kernels of the same version, or with a user specific configuration. Some schedulers maintain a dynamic priority for every process or thread, that varies over time, so that long-running high priority jobs do not block the entire system. True realtime systems impose further constraints on (high priority) threads, e.g. that they must either finish in a given time period, or must reduce their own priority after the really time critical parts have been done, or otherwise the system will assign them a lower priority automatically.

Thus priorities should only be considered as *hints* to the scheduler, with unpredictable consequences on arbitrary machines. When an application is tuned for best performance on a specific machine, it may behave miserably on a similar machine with only a different scheduler, or on a very different platform.

DoDi

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to