Re: is it possible to switch between threads manually.
On Oct 1, 6:35 pm, werasm <wer...@gmail.com> wrote:
On Oct 1, 2:31 pm, Erik Wikstr=F6m <Erik-wikst...@telia.com> wrote:
The whole idea with threads is that more than one of them
can execute concurrently,
Sorry, OT, but your response got my attention.
Not necessarily.
He should have said "pseudo-concurrently":-). Conceptually,
each thread represents a separate thread of execution, which
runs in parallel with the other threads. (Obviously, real
parallelism requires as many CPU's as there are active threads.)
Threads have been used long before dual core processors
existed.
Except that they weren't always called threads:-). Back before
MMU's were standard, when memory wasn't protected, there really
wasn't any difference between a thread and a process. My first
experience with "multi-threaded" code, back in the 1970's,
called them processes, but since everyone could access all of
the memory, they behaved pretty much like threads today. (And
an incorrectly managed pointer could corrupt the OS data
structures---gave a whole new dimension to undefined behavior,
which really could wipe out a hard disk.)
And of course, even back then, we had multiprocessor systems.
(But they were easier to understand and program, since there was
no cache, no pipeline, and no hardware reordering.)
In software that requires real-time response under certain
circumstances (especially if one only has one processor),
threads are used to prioritize the part that requires real
time response. It is also used in cases where one waits on
blocking IO calls whilst keeping the GUI active, for example.
so unless you only have a single-core CPU without hyper-
threading capabilities (or similar) your application's
thread should be executing concurrently.
Yes, true, if they make use of round robin scheduling.
My question is, when the process is running, can i
interrupt it manually and switch between threads? for
example, the application is running, now when i
interrupted, the applications thread is on thread3. Now
from thread3 can i switch to thread5 and continue with
execution? if yes, is there any difference in what
operating system does and what i did?
It depends on your threading library, but I have never heard
of one that allows that kind of manipulation, not can I come
up with a reason to do so.
If you make use of pre-emptive scheduling (OS dependent) you
may be able to do this by using the priorities of threads. I
don't think Windows supports pre-emptive scheduling, for one.
We use it under Linux, but it is only advised when something
really needs to finish before anything else (even the Kernel).
I'm not sure about your vocabulary here. Scheduling policy is
somewhat orthogonal to preemption; Windows definitly has
preemptive threads, even if it doesn't support a priority based
threading policy. Preemption simply means that context switches
may occur at any time, regardless of what the thread is doing.
(Without preemption, you don't need locks, because your thread
will retain control of the CPU until you tell the system it can
change threads. It's actually a much easier model to deal with,
but of course, it makes no sense in a multi-CPU environment.)
Note too that there are many variants of scheduling policies.
Early Unix, for example, used a decaying priority for process
scheduling: every so often, the "priority" of all of the
processes was upped, by a factor which depended on their nice,
and as a process used CPU (and possibly other resources), it's
priority "decayed".
I think that Posix has provisions for relative priority, within
a process, as well. (But again, all scheduling policy options
are optional; a Posix system doesn't have to implement them.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34