Gevent 是怎么在单线程中实现并发的呢?

2017-02-14 18:15:41 +08:00
 warcraft1236

教程链接: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001407503089986d175822da68d4d6685fbe849a0e0ca35000

廖雪峰大大的教程中,有这么一句

3 个网络操作是并发执行的,而且结束顺序不同,但只有一个线程

我不理解,为什么单线程就能够并发 3 个网络请求呢

4871 次点击
所在节点    Python
29 条回复
araraloren
2017-02-15 08:25:56 +08:00
那不知道楼主是否知道并发的意思呢,如果明白楼上的各位回答很清楚了。。
whx20202
2017-02-15 10:00:57 +08:00
warcraft1236
2017-02-15 10:13:44 +08:00
@yongzhong 感谢
hfpeng01
2017-02-15 11:33:07 +08:00
如果没有任务阻塞,那么在单处理器上使用并发就没有任何意义。有阻塞的话,就是切分 CPU 时间片, cpu 轮流给每个任务分配占用时间。
WangYanjie
2017-02-15 12:21:44 +08:00
msg7086
2017-02-15 14:55:52 +08:00
非阻塞就可以实现单个线程并发了。
软件的线程本身就是非阻塞的,所以一个 CPU 线程可以运行几百几千个软件线程。
同理如果你操作也是非阻塞的,那一个软件线程也就可以运行几百几千个操作了。
wwqgtxx
2017-02-15 16:19:37 +08:00
@WangYanjie 现在应该是 libev 了,从 gevent1.0 开始就不用 libevent 了
itfanr
2017-02-15 18:59:10 +08:00
@yongzhong 哈哈
WangYanjie
2017-02-16 10:09:13 +08:00
@wwqgtxx 嗯,没注意,提留在 0.9.x 太久了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX