美文网首页
Python 并发编程概念

Python 并发编程概念

作者: 念念咚咚锵 | 来源:发表于2018-04-11 22:53 被阅读0次

    本篇文章,我们会详细剖析python并发编程的一些概念还有编程方法,并且同时将所学,对一些大家常用的web框架并发处理进行分析。

    基础概念

    并发与并行

    并发是一个进程下执行多个线程。而并行是针对机器利用多核处理程序。打个形象的比喻,并发就是一条路上正在走路的两个人或者更多人,而并行是两条路上同时在走的两个人算做并行。

    进程

    应用程序执行的基本处理单元,每个进程有自己的堆空间,代码段,数据段,进程控制块等

    线程

    线程是轻量级的进程。线程执行中,有自己线程id,程序计数器,栈空间, 共用进程的代码段和数据段,其他操作资源。 对于io密集型的处理,可以采用多线程(创建线程池)。

    协程

    允许程序执行中进行悬挂并能够恢复执行,python是通过yield来实现的,yield就是在程序执行半途中,进行悬挂,并不对函数栈进行释放。yield 回调则继续之前的执行。

    GIL

    字面理解就是全局解析锁,这个GIL是在实现cpython解析器过程中用到的锁,原因有二,其一 ,the main reason for the GIL in CPython is because of the reference counting GC system 垃圾回收机制,如果没有这把锁,资源的回收就会回收多次,导致不可预料的问题。其二,保证并发解析的正确性,引入了这个锁。(详细了解,必须了解cpython的垃圾回收机制和这个锁的关系,还有Jython是如何避免这个问题,以后在分析)

    编码

    # 进程,Queue可以作为线程和进程之间传递消息,还有管道也可传递进程间消息
    from multiprocessing import Pool
    
    def f(x):
      return x*x
    
    def __name__ == "__main__":
      p = Poll(5)
      # map能够充分利用多核进行并行计算
      print p.map(f, range(10))
    
    #  线程
    #encoding=utf-8
    from threading import Thread
    import time
    
    ab = 0
    def f(x):
        global ab
        ab = x*x
    
    th = Thread(target=f,name="wahah", args=(123,))
    th.start()
    th.join()
    print ab
    
    # 协程
    利用yield实现,send(x)发送数据,yield x 返回数据
    

    相关文章

      网友评论

          本文标题:Python 并发编程概念

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