traceback from hg serve

James Gregory james.jrg at gmail.com
Wed Apr 30 20:12:01 UTC 2014


Thanks for the enlightenment! I was getting confused and thinking that
context switching worked differently in Python due to the GIL, but it
appears to work how you'd normally expect threading to work.

On 30 April 2014 02:55, Greg Ward <greg at gerg.ca> wrote:
> On 28 April 2014, James Gregory said:
>> Does the GIL allow a thread context switch whenever a C library call
>> is made? If so then my previous statement about the GIL is nonsense,
>> as there are countless opportunities for context switching in just
>> about any code. I'm not a Python developer so I don't really know what
>> I'm talking about.
>
> Getting dangerously off-topic, and I'm no expert here, but the GIL
> simply guarantees no context switches while a single Python opcode is
> executing. Consider the code
>
>   b = a + 1
>
> That compiles to four opcodes in Python's stack-based VM:
>
>   2           0 LOAD_FAST                0 (a)
>               3 LOAD_CONST               1 (1)
>               6 BINARY_ADD
>               7 STORE_FAST               1 (b)
>
> so there are three places where we might context switch while
> executing "b = a + 1".
>
> However, the GIL guarantees that we will not context-switch while
> computing "a + 1", i.e. while BINARY_ADD is executing. But that
> BINARY_ADD might be adding two integers, or it might be adding 1 to
> every element of a million-element matrix. That's what makes Python
> fun to program and hard to compile. ;-)
>
>        Greg
> --
> Greg Ward                            http://www.gerg.ca
> <greg at gerg.ca>                       @gergdotca



-- 
James



More information about the Mercurial mailing list