美文网首页
Python进程线程协程

Python进程线程协程

作者: DC_5753 | 来源:发表于2019-04-09 10:27 被阅读0次

    详情

    进程是程序执行时的一个实例,资源分配的最小单位。一个进程一个cpu

    线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元。降低上下文切换的消耗,提高系统的并发性。

    协程采用合作式多任务调度,线程和进程是由操作系统调度的(抢占式),而协程的调度由用户自己控制。

    并行:多个CPU同时执行多个任务,就好像有两个程序,这两个程序是真的在两个不同的CPU内同时被执行。

    并发:同一时间间隔,CPU交替处理多个任务,还是有两个程序,但是只有一个CPU,会交替处理这两个程序,而不是同时执行,只不过因为CPU执行的速度过快,而会使得人们感到是在“同时”执行,执行的先后取决于各个程序对于时间片资源的争夺。

    Python GIL(全局解释器锁) global interpreter lock

    cpython解释器的内存管理并不是线程安全,锁机制保护多线程情况下对python对象的访问。

    在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下一条指令并不会互相影响。限制多线程同时执行,保证同一时间内只有一个线程在执行。GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。多线程之间数据完整性和状态同步的最简单方法自然就是加锁。

    协程的好处

    与线程的抢占式调度不同,它是协作式调度。协程也是单线程。

    操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,

    无需线程上下文切换的开销
    无需原子操作锁定及同步的开销
    方便切换控制流,简化编程模型

    高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

    缺点:

    无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。

    进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

    区别
    (1)线程共享内存空间;进程的内存是独立的
    (2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

    1. 进程是资源分配的单位
    2. 线程是操作系统调度的单位
    3. 进程切换需要的资源很最大,效率很低
    4. 线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)
    5. 协程切换任务资源很小,效率高

    互斥锁 : 多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱

    相关文章

      网友评论

          本文标题:Python进程线程协程

          本文链接:https://www.haomeiwen.com/subject/rdnviqtx.html