• Kirill Smelkov's avatar
    golang: Move channels implementation from golang.py to golang.pyx · 83259a1b
    Kirill Smelkov authored
    Plain code movement with just s/panic/pypanic/ as in golang.pyx panic is
    aleady there and means semantically different thing. Moved code, even
    though it lives in golang.pyx, is still Python code and requires Python
    runtime and GIL. We'll be splitting channels implementation into nogil
    world in the following patches.
    
    Just plain movement to Cython brings the following speedup:
    
     (on i7@2.6GHz)
    
    thread runtime:
    
        name             old time/op  new time/op  delta
        go               26.6µs ± 1%  21.7µs ± 1%  -18.54%  (p=0.000 n=10+10)
        chan             13.7µs ± 1%   9.9µs ± 4%  -27.80%  (p=0.000 n=10+10)
        select           29.3µs ± 2%  19.2µs ± 4%  -34.65%  (p=0.000 n=9+9)
        def              55.0ns ± 0%  58.0ns ± 0%   +5.45%  (p=0.000 n=10+10)
        func_def         44.0µs ± 1%  44.4µs ± 0%   +0.72%  (p=0.002 n=10+10)
        call             64.0ns ± 0%  63.0ns ± 0%   -1.56%  (p=0.002 n=8+10)
        func_call        1.09µs ± 1%  1.05µs ± 1%   -2.96%  (p=0.000 n=10+10)
        try_finally       139ns ± 2%   135ns ± 0%   -2.60%  (p=0.000 n=10+10)
        defer            2.36µs ± 1%  2.36µs ± 1%     ~     (p=0.617 n=10+10)
        workgroup_empty  58.1µs ± 1%  49.0µs ± 1%  -15.61%  (p=0.000 n=10+10)
        workgroup_raise  72.7µs ± 1%  62.6µs ± 1%  -13.88%  (p=0.000 n=10+10)
    
    gevent runtime:
    
        name             old time/op  new time/op  delta
        go               28.6µs ± 0%  25.4µs ± 0%  -11.20%  (p=0.000 n=8+9)
        chan             15.8µs ± 1%  12.2µs ± 1%  -22.62%  (p=0.000 n=10+10)
        select           33.1µs ± 1%  23.3µs ± 2%  -29.60%  (p=0.000 n=10+10)
        def              55.0ns ± 0%  56.0ns ± 0%   +1.82%  (p=0.000 n=10+10)
        func_def         44.4µs ± 2%  43.0µs ± 1%   -3.06%  (p=0.000 n=10+9)
        call             64.0ns ± 2%  69.0ns ± 0%   +7.81%  (p=0.000 n=10+10)
        func_call        1.06µs ± 0%  1.06µs ± 1%     ~     (p=0.913 n=8+9)
        try_finally       136ns ± 0%   139ns ± 0%   +2.21%  (p=0.000 n=9+10)
        defer            2.29µs ± 1%  2.38µs ± 2%   +3.58%  (p=0.000 n=10+10)
        workgroup_empty  73.8µs ± 1%  70.5µs ± 1%   -4.48%  (p=0.000 n=10+10)
        workgroup_raise  94.1µs ± 0%  90.6µs ± 0%   -3.69%  (p=0.000 n=10+10)
    83259a1b
golang_test.py 26.4 KB