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