并发的核心思想在于,大的任务能够分解成一系列的子任务,后者能够被调度成同时执行或者异步执行,而不是一次一个地或者同步地执行。两个子任务之间的切换也就是上下文的切换。
并发
在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