Python 基础知识点理解(三)之Python多进程和多线程的区别和联系

先说一下什么是进程,线程进程:进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配和调度的基本单位,也是线程的容器线程:线程也叫作轻量级进程,是程序执行的最小单位,他本身只拥有少部...

先说一下什么是进程,线程

  进程:进程时计算机程序一次执行的实例,由 程序段 数据段 PCB组成,是计算机资源分配和调度的基本单位,也是线程的容器

  线程:线程也叫作轻量级进程,是程序执行的最小单位,他本身只拥有少部分执行必须的资源。

  

  进程和线程的VS(创建,通信,稳定性): 

    (1)线程共享内存空间;进程的内存是独立的

    (2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

    (3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

    (4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

    (5)改变主线程(如优先权),可能会影响其它线程;多进程的稳定性好,改变父进程,不影响子进程

 

 

多进程和多线程:

因为GIL的问题导致系统中同一时间点只能有一个线程被解释器解释,这就导致了线程无法实现并行,无法充分的利用我们计算机的多核资源,python所谓的多线程编程就类似于单核CPU情况下的多进程编程。

相比之下多进程下每个进程执行的时候都会创建一个解释器,所以就能够比较好的计算机的多和资源实现并行。

那么,我们改如何解决GIL锁的问题呢?

  1.更换cpython为jpython(不建议)

  2.使用多进程完成多线程的任务

  3.在使用多线程可以使用c语言去实现

问题1: 什么时候会释放Gil锁,
  1 遇到像 i/o操作这种 会有时间空闲情况 造成cpu闲置的情况会释放Gil
  2 会有一个专门ticks进行计数 一旦ticks数值达到100 这个时候释放Gil锁 线程之间开始竞争Gil锁(说明:
      ticks这个数值可以进行设置来延长或者缩减获得Gil锁的线程使用cpu的时间)

问题2: 互斥锁和Gil锁的关系
Gil锁  : 保证同一时刻只有一个线程能使用到cpu
互斥锁 : 多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱

 

 

https://www.cnblogs.com/shunge/p/8120047.html

https://blog.csdn.net/IAlexanderI/article/details/70168318

http://python.jobbole.com/85231/

协程

协程又叫微线程,简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态.

 

Python里最常见的yield就是协程的思想!

 

 

本文标题为:Python 基础知识点理解(三)之Python多进程和多线程的区别和联系