zoukankan      html  css  js  c++  java
  • 深入理解Python中的进程

    1、进程的概念
    什么是进程—>CPU在同一时刻只能处理一个任务,只是因为cpu执行速度很快。
    cpu在各个任务之间来回的进行切换。
    进程的概念:正在进行的一个过程或者说一个任务,而负责执行任务的则是CPU,进程本身是
    一个抽象的概念,即进程就是一个过程、一个任务。
    CPU描述的是一个程序的执行过程.
    进程之间是如何做到并发的:CPU在各个任务之间来回的进行切换,并在切换的过程当中保存当前
    进程的执行状态(保存蛋糕的执行过程)。
    进程与程序的区别:程序相当于菜谱,而进程相当于做菜的整个过程。
    需要强调的是:同一个程序执行两次(双击),那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放a,一个可以播放b.
    核的概念:https://zhidao.baidu.com/question/541410131.html
    处理器,就是说有几个处理器。。。也就说一个CPU里面会有几个处理器,这样就可以同时处理几个要求了。。。

    2、并行与并发

    并行 : 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU )

    并发 : 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。

    区别:

    并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
    并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。

    3、同步与异步的概念
    同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
    异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进行处理,这样可以提高执行的效率。
    打电话的过程就是同步通信,发短信时就是异步通信。

    4、进程创建的方式
    用户创建出来的所有进程都是由操作系统负责的,因此无论是哪一种创建进程的方式,实际上都是调用操作系统的接口创建的,进程的切换都是由操作系统控制的。
    无论哪一种创建进程的方式,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。

    5、父进程和子进程之间的关系
    子进程创建后,父进程和子进程有各自不同的地址空间,多道技术要求物理层面实现进程之间内存的
    隔离,任何一个进程在其地址空间的修改都不会影响到另外一个进程。
    注意:子进程和父进程之间是可以有只读的共享的内存区域的。
    进程与进程之间数据(资源)是隔离的,两个进程之间可以基于管道这种方式进行通信。在Unix当中,是含有进程层次的概念的,但是在windows当中,是没有进程层次的概念的,所有的进程都是地位相同的。
    在Linux当中,每启动一个命令,都会启动一个进程。

    6、线程的相关概念
    6、线程的概念
    一个进程里面至少有一个控制线程,进程的概念只是一种抽象的概念,真正在CPU上面调度的是进程
    里面的线程,就好比真正在地铁这个进程里面工作的实际上是地铁里面的线程,北京地铁里面至少要有
    一个线程,线程是真正干活的,线程用的是进程里面包含的一堆资源,线程仅仅是一个调度单位,不包含资源。

    7 什么时候需要开启多个线程?
    什么时候需要开启多个线程:一个进程里面的多个线程共享这个进程里面的资源,因此如果多个任务共享同一块资源的时候,需要开启多个线程。
    多线程指的是,在一个进程中开启多个线程,简单的说:如果多个任务共用同一个资源空间,那么必须在一个进程内开启多个线程。

    8一个进程里面需要包含多个线程?
    一个进程这个任务里面可能对应多个分任务,如果一个进程里面只开启一个线程的话,多个分任务之间实际上是串行的执行效果,即一个程序里面只含有一条执行路径。

    9多线程和多进程的关系
    对于计算密集型应用,应该使用多进程;对于IO密集型应用,应该使用多线程。
    线程的创建比进程的创建开销小的多。

    10、Python中线程的特点
    在其他语言当中,一个进程里面开启多个线程,每个线程都可以给一个cpu去使用,但是在
    python当中,在同一时刻,一个进程当中只能有一个线程处于运行状态。
    eg:在其他语言当中,比如我现在开启了一个进程,这个进程当中含有几个线程,如果我现在有多个cpu,每一个线程是可以对应相应的CPU的。
    但是在python当中,如果我们现在开启了一个进程,这个进程里面对应多个线程,同一时刻只有一个
    线程可以处于运行状态。
    对于其他语言而言,在多CPU系统中,为了最大限度的利用多核,可以开启多个线程。
    但是Python中的多线程是利用不了多核优势的。

    进程与线程的区别:
    在同一个进程当中,多个线程彼此之间可以相互通信;但是进程与进程之间的通信必须基于IPC这种
    消息的通信机制(IPC机制包括队列和管道)。
    在一个进程当中,改变主线程可能会影响其它线程的行为,但是改变父进程并不会影响其它子进程
    的行为,因为进程与进程之间是完全隔离的。
    在python当中,在同一时刻同一进程当中只能同时有一个线程在运行,如果有一个线程使用了
    系统调用而阻塞,那么整个进程都会被挂起。

  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/ellisonzhang/p/10440379.html
Copyright © 2011-2022 走看看