我是gevent的新手。我已阅读gevent
的介绍他们提供了简单的例子,但我很难理解greenlet是什么。从学习并发。
Greenlets are a very lightweight coroutine written in C that
are cooperatively scheduled. They provide us with a very lightweight thread-
like object that allows us to achieve concurrent execution within our Python
programs without incurring the cost of spinning up multiple threads.
Greenlets不是线程? 如何定义同步点?可以用例子来解释吗?
答案 0 :(得分:1)
同步编程一次只能做一件事。因此,当数据库查询正在运行时,其他所有人(比如通过Web框架提取网页)必须等待完成。
Gevent通过使用上下文切换和事件使其成为异步。这是什么意思?想想这样。你有一个等待事情发生的东西的队列,同时gevent说,好的,你可以等,我将转到下一个任务,并在我等待你完成时开始做事(比如数据库读取或等待对于用户输入)当你完成后,当我回到我的队列并且你说你准备好进行下一步时,我会专注于你。
通过这种方式,虽然仍然是单线程,但应用程序可以在作业之间快速切换,不断检查状态以查看是否值得关注,同时,其他事情可以在等待你时完成。
与操作系统处理的多线程相比,它们需要自己的资源,并且切换成本很高。
Gevent将通常使用线程的东西转换为greenlets很容易。