In our example we'll use two threads:
Thread | Priority |
---|---|
A | High |
B | Low |
Now we'll watch them run, assuming both start at the same time:
Time | Thread | Action | Explanation |
---|---|---|---|
t1 | A | Create | Thread is created. |
t2 | A | Block | The thread is waiting for, say, I/O; it can't continue without it. |
t3 | B | Create | Rather than sit idle, the kernel runs next highest priority thread. |
t4 | B | Kernel Call | Thread B is working. |
t4.5 | N/A | N/A | I/O completed; Thread A is ready to run. |
t5 | B | Block | Thread A is now ready to run—it preempts thread B. |
t6 | A | Run | Thread A resumes. |
t7 | A | Dies | Its task complete, the thread terminates. |
t8 | B | Runs | Thread B continues from where it left off. |
t9 | ... | ... | ... |