Python threading (was: Re: global interpreter lock not working as it should)
a-steinhoff at web.de
Sun Aug 4 20:40:33 CEST 2002
Paul Rubin <phr-n2002b at NOSPAMnightsong.com> wrote in message news:<7xu1mbj67c.fsf at ruckus.brouhaha.com>...
> a-steinhoff at web.de (Armin Steinhoff) writes:
> > > The interpreter in Python is effectively a critical region of
> > > code. Sections of the interpreter that might block are placed
> > > outside of the region so that other threads can enter it while
> > > that thread is blocked. Similarly, every thread is forced
> > > periodically to leave the region and re-enter it in order to allow
> > > the thread scheduler to re-schedule as necessary (the piece you
> > > posted).
> > IMHO ... there is nothing like a 'thread-scheduler' in the python
> > code. All python threads are scheduled by the OS ... that means
> > there is no code in the python program which can _force_
> > periodically a thread to leave this critical section ( e.g. in the
> > middle of the execution of the 10 byte codes).
> I think you're confused about the meaning of "critical section".
No .. I believe you didn't understand what I wrote!
> A critical section is a region of code where thread switching is
> impossible, because the code has a lock set,
No ... a thread which owns a critical section can always be preempted
by a thread with a higher priority :)
> interrupts are masked, or something like that.
Critical sections are most used to protect shared resources.
> When the program leaves the critical section by releasing the lock,
> thread switches become possible.
This is a wrong theory ...
> Just because they're POSSIBLE
> doesn't mean they necessarily HAPPEN. It just means the OS's
> scheduler can decide to switch threads there if it wants to. It might
> not want to.
Interesting :) IMHO, scheduler rules are event (IRQ, timers) and
priority driven ... so there is no room for 'may or may not'
> While in the critical section, the OS doesn't have the
> option of switching. That's the difference.
> In Python, the interpreter leaves the critical section (releases the
> GIL) every 10 byte codes. That doesn't mean there has to be a thread
> switch then, but just that there MIGHT be one. Do you understand now?
Try to understand what I wrote ... then please ask again.
More information about the Python-list