zoukankan      html  css  js  c++  java
  • 协程与进程,线程

    协程概念

    我们通常所说的协程Coroutine其实是corporateroutine的缩写,直接翻译为协同的例程,一般我们都简称为协程。
    
    在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程。
    

    协程与进程

    进程是内核调度,而协程是在用户态调度,也就是说进程的上下文是在内核态保存恢复的,而协程是在用户态保存恢复的,很显然用户态的代价更低
    
    进程会被强占,而协程不会,也就是说协程如果不主动让出CPU,那么其他的协程,就没有执行的机会。
    
    对内存的占用不同,实际上协程可以只需要4K的栈就足够了,而进程占用的内存要大的多
    
    从操作系统的角度讲,多协程的程序是单进程,单协程
    

    协程与线程

    线程之间需要上下文切换成本相对协程来说是比较高的,尤其在开启线程较多时,但协程的切换成本非常低。
    
    同样的线程的切换更多的是靠操作系统来控制,而协程的执行由我们自己控制
    

    猴子补丁的作用:

    协程用time.sleep(1)不能切换任务,用gevent.sleep(1)可以, 所以,猴子补丁

    协程任务之间的切换由程序代码(gevent)完成,只有遇到协程模块能识别到的IO操作的时候,程序才会进行协程切换,实现并发的效果

    在这个patch_all后面的所有模块中,发生的阻塞都会有gevent的效果

    所以,注意猴子补丁的位置。会导致不能切换线程。

    不要在b.py的全局设置monkey.patch_all(), 而是到具体需要使用gevent的函数中再设置。这样a.py引用b.py时就不会引用到monkey.patch_all()的设置了。

  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/pythonwl/p/13551864.html
Copyright © 2011-2022 走看看