-
Jason Madden authored
As a performance optimization for applications where spawning greenlets is critical. Plus some other optimizations to speed up spawning in the general case. CPython 3.6 with 1.2.2 vs these changes with tracking disabled: | Benchmark | 36_122_bench_spawn | 36config_bench_spawn_tree_off | +------------------------+--------------------+-------------------------------+ | eventlet spawn | 12.6 us | 12.2 us: 1.04x faster (-4%) | | eventlet sleep | 5.22 us | 4.97 us: 1.05x faster (-5%) | | gevent spawn | 4.27 us | 5.06 us: 1.19x slower (+19%) | | gevent sleep | 2.63 us | 1.25 us: 2.11x faster (-53%) | | geventpool spawn | 9.00 us | 8.31 us: 1.08x faster (-8%) | | geventpool sleep | 4.82 us | 2.83 us: 1.70x faster (-41%) | | geventraw spawn | 2.51 us | 2.81 us: 1.12x slower (+12%) | | geventraw sleep | 649 ns | 679 ns: 1.05x slower (+5%) | | geventpool join | 3.47 us | 1.42 us: 2.44x faster (-59%) | | geventpool spawn kwarg | 11.0 us | 8.95 us: 1.23x faster (-19%) | | geventraw spawn kwarg | 3.87 us | 4.20 us: 1.08x slower (+8%) | The differences compared to master are hard to quantify because the standard deviation ends up being more than 10% of the mean in many cases---and about a 10% improvement is what we typically see, so it goes back and forth.
25ff8d4a