併發的核心思想在於,大的任務能夠分解成一系列的子任務,後者能夠被調度成同時執行或者異步執行,而不是一次一個地或者同步地執行。兩個子任務之間的切換也就是上下文的切換。
併發
在gevent裏面,上下文切換是經過yielding來完成的,在下面的例子裏,咱們有兩個上下文,經過調用gevent.sleep(0),他們各自yield向對方。異步
import gevent
spa
def foo():ci
print ("Running in foo")同步
gevent.sleep(0)it
print("Implicit context switch back to foo again")event
def bar():import
print ("Explicit context to bar")yield
gevent.sleep(0)im
print("Implicit context switch back to bar")
gevent.joinall([
gevent.spawn(foo),
gevent.spawn(bar),
])
運行結果:
Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar