进程:系统进行资源分配和调度的基本单位
线程:程序执行的最小单元
协程:本质上就是一个线程,区别之处在于,线程由OS操作,而协程由用户操作
进程、线程、协程的区别
线程和进程的操作是由程序触发系统接口,最后的执行者是系统,而协程的操作则是用户。
协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。
协程和线程的详细比较
比较项 线程 协程
占用资源 初始单位为1MB,固定不可变 初始一般为 2KB,可随需要而增大
调度所属 由 OS 的内核完成 由用户完成
切换开销 涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP…等寄存器的刷新等 只有三个寄存器的值修改 – PC / SP / DX.
性能问题 资源占用太高,频繁创建销毁会带来严重的性能问题 资源占用小,不会带来严重的性能问题
数据同步 需要用锁等机制确保数据的一致性和可见性 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多
LoadRunner 、 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力;而Leming WebRunner 是基于Locust封装起来的, 并发机制摒弃了进程和线程,采用协程(gevent)的机制,避免了系统级资源调度,由此可以大幅提高单机的并发能力。
线程:程序执行的最小单元
协程:本质上就是一个线程,区别之处在于,线程由OS操作,而协程由用户操作

线程和进程的操作是由程序触发系统接口,最后的执行者是系统,而协程的操作则是用户。
协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。
协程和线程的详细比较
比较项 线程 协程
占用资源 初始单位为1MB,固定不可变 初始一般为 2KB,可随需要而增大
调度所属 由 OS 的内核完成 由用户完成
切换开销 涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP…等寄存器的刷新等 只有三个寄存器的值修改 – PC / SP / DX.
性能问题 资源占用太高,频繁创建销毁会带来严重的性能问题 资源占用小,不会带来严重的性能问题
数据同步 需要用锁等机制确保数据的一致性和可见性 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多
LoadRunner 、 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力;而Leming WebRunner 是基于Locust封装起来的, 并发机制摒弃了进程和线程,采用协程(gevent)的机制,避免了系统级资源调度,由此可以大幅提高单机的并发能力。