Python协程、Eventlet原理剖析及并发场景下性能测试

本文深入探讨Python协程及其优点,详细介绍Eventlet库,包括GreenThread的启动、控制以及模块补丁。通过并发性能测试,展示了Eventlet在非阻塞I/O上的优势,对于高并发场景的适用性。
摘要由CSDN通过智能技术生成

1  协程

1.1  什么是协程

       协程,又称微线程,纤程。英文名Coroutine。协程是一条执行序列,拥有自己独立的栈、局部变量和指令指针,同时又与其他的协同程序共享全局变量。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在“子程序”(协程)内部可中断,然后转而执行别的“子程序”,在适当的时候再返回来接着执行。

1.2  线程与协程

       一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。线程进程都是同步机制,而协程则是异步。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态,协程需要人为的设置使其互相让渡CPU控制权,而不是抢占。协程既能够共享数据结构,又不需要显式的互斥控制,因为只有当一个协程让出了控制权后其他的协程才能访问彼此共享的数据结构。

1.3  协程的优点

  • 每个协程都有自己私有的栈和局部变量;
  • 同一时间只有一个协程在运行,由于在同一个线程上,因此可以避免竞争关系而使用锁;
  • 顺序可控,完全是由程序控制执行的顺序。而通常多线程一旦启动,运行时序是没法预测的,因此通常会给测试所有的程序带来问题。

2  Eventlet

2.1  简介

官方解释:

Eventlet is a concurrent networking library for Python that allows you to change how you run your code, not how you write it.

  • It uses epoll or kqueue or libevent for highly scalable non-blocking I/O.
  • Coroutines ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O.
  • The event dispatch is implicit, which means you can easily use Eventlet from the Python interpreter, or as a small part of a larger application.

大意:高度可扩展的非阻塞I / O,这意味着非常适合高并发!!!

       Eventlet改写了系统IO库,并通过一些python的魔术方法和其他方法,将这些改写的IO库patch到spawn产生的GreenThread(绿色线程,即协程)上,从而在代码执行IO操作的时候,实现自动非阻塞。

2.2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值