什么是小绿叶?

What is greenlet?

我是 gevent.I 的新手,已阅读 gevent

的介绍

他们提供了简单的示例,但我很难理解什么是 greenlet is.From 学习并发。

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不是线程? 同步点是如何定义的?有人可以举例说明吗?

同步编程一次只能做一件事。因此,虽然数据库查询是 运行,但其他所有人(比如通过 Web 框架调出网页)都必须等待它完成。

Gevent 通过使用上下文切换和事件使其异步。这是什么意思?可以这样想。你有一个等待事情发生的队列,同时 gevent 说,好的,你可以等一下,我将转到下一个任务并开始做一些事情,而我正在等待你完成(比如数据库读取,或等待用于用户输入),当你完成后,当我返回我的队列并且你说你已准备好进行下一步时,我会为你专注于此。

这样,虽然仍然是单线程,但应用程序可以超快地在作业之间切换,不断检查状态以查看它是否值得关注,同时,其他事情可以在它等待你的时候完成。

与由 OS 和繁重处理的多个线程相反,它们需要自己的资源并且在它们之间切换是昂贵的。

Gevent 使将通常使用线程的东西转换为 greenlet 变得容易。