一、进程

  1、什么是进程?

   1.1 进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。

   1.2 程序是指进程需要完成那些功能以及如何完成。

   1.3 数据集是指程序在执行过程中所需要使用的资源。

   1.4进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用他来控制和管理进程,他是系统感知进程存在的唯

     一标识

二、线程

  1、为什么会有线程?

    1.1线程是为了降低上下文切换的消耗,提高系统的并发性,突破一个进程只能干一件事的局限。

  2、什么是线程?

    2.1线程是轻量级进程,他是一个基本的cpu执行单元,也是程序执行过程中的最小单元。由线程ID,程序计数器,寄存器集合,

      和堆栈共同组成。

    2.2 由于线程是cpu最小的执行单元所以cpu真正执行的是线程,而进程只是管理线程,并不被cpu所执行。

·  3、线程的好处?

    3.1 减少了程序并发执行的消耗,提高了操作系统的并发性能,但是线程没有自己的系统资源,是由进程分配的。

三、进程和线程的关系

  1、一个线程只能属于一个进程,而一个进程可以有多个线程,但是最少必须有一个主线程。

  2、系统资源分配给进程,进程下的所有线程共享分配给该进程的所有资源。

  3、CPU分配给线程,即真正在cpu上运行的是线程。

四、并行和并发

  1、什么是并行处理?

    并行处理指的是计算机cpu同事处理两个或两个以上的线程或者说是程序。

  2、什么是并发处理?

    并发处理指的是计算机cpu在一段时间内能切换处理多少个进程。

  3、二者之间的关系?

    并行是并发的子集,并发是并行的父集。

  4、补充知识点

    串行:串行指的是cpu按顺序执行程序。

五、同步和异步

  1、什么是同步?

    同步就是指一个进程在执行某个请求时,若该请求需要一段时间才能返回信息,那么这个进程就会一直等待下去直到

      接收到该请求的返回信息才会执行下面的操作。

  2、什么是异步?

    异步是指一个进程在执行某个请求后,若该请求需要一段时间才能返回信息,但是该进程不会等待该请求,而是直接执行下面的操作

      当该请求有返回信息时操作系统会通知进程进行处理,这种异步处理的机制大大提高了程序的执行效率。

六、密集型任务

  1、IO密集型任务

    程序存在大量IO操作,比如说sleep,input,accert,等等。

  2、计算密集型任务

    程序存在大量的计算操作,除IO操作外的程序都是计算操作。

  3、在多线程处理程序的情况下,IO密集型任务比计算密集型任务更有优势。

  4、对应python而言,无法利用多核,因为他的进程有一个lock锁的机制,

七、补充:

  1、unix和windows创建子进程的异同

    相同点:不论是windows还是unix系统通过进程创建的子进程后,父进程和子进程有着各自不同的内存地址,因为他们都必须遵循多道技术 ,要求物理层面实现内存隔离,任何一个进程在其地址空间中的修改都不会影响到其他进程。

    不同点:在unix中子进程的初始地址空间是父进程地址空间的一个副本(子进程和父进程是可以有只读的共享内存区),但是对于windows系统而已一开始子进程和父进程的地址空间就是不同的。

  2、unix和windows进程的层次结构

    相同点:论UNIX还是windows,进程只有一个父进程

    不同点:UNIX中所有的进程,都是以init进程为根,组成树形结构。父子进程共同组成一个进程组。在windows中,没有进程层次的概念,所有的进程都是地位相同的,唯一类似于进程层次的暗示,是在创建进程时,父进程得到一个特别的令牌(称为句柄),该句柄可以用来控制子进程,但是父进程有权把该句柄传给其他子进程,这样就没有层次了。

  3、进程的三种状态

    1. 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作

    2. 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。

    

  4、为何要用多线程

    1、多线程共享一个进程的地址空间

    2. 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用

   3. 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠运行,从而会加快程序执行的速度。

    4. 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。(这一条并不适用于python)

八、线程对象

  1、线程对象的创立,如图所示。

    

  2、jion():在子线程完成运行之前,这个子线程的父线程将一直被阻塞,直到子线程完成之后,父线程才会继续进行。

    

  3、setDeamon(True):将线程声明为守护线程。

    1、将线程声明为守护线程必须在start()方法之前调用。

    2、设置守护线程的原因:通常情况下当主线程程序结束后会检查他下面的子线程程序是否结束,如果子线程程序没有结束,那么

      主线程会等子线程程序结束后一起退出,但是特殊情况下主线程不需要等到子线程结束后再一起退出,而是主线程程序完成后

      就会自动退出,这时就用到了守护线程技术。如图所示:

    

  4、Thread实例对象的方法

    1、查看线程名:getName()  

    2、设置线程名:setName()

    3、返回线程是否活动的:isAlive()

  5、 threading模块提供的一些方法:

    1、threading.currentThread(): 返回当前的线程变量。
  2、threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  3、threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

    

  

    

      

      

python基础23 -----进程和线程的更多相关文章

  1. python基础之进程、线程、协程篇

    一.多任务(多线程) 多线程特点:(1)线程的并发是利用cpu上下文的切换(是并发,不是并行)(2)多线程执行的顺序是无序的(3)多线程共享全局变量(4)线程是继承在进程里的,没有进程就没有线程(5) ...

  2. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  3. python中的进程、线程(threading、multiprocessing、Queue、subprocess)

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  4. Java多线程基础:进程和线程之由来

    转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...

  5. 二十三. Python基础(23)--经典类和新式类

    二十三. Python基础(23)--经典类和新式类 ●知识框架   ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object):    ...

  6. 1、Java多线程基础:进程和线程之由来

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

  7. python基础(16)-进程&线程&协程

    进程之multiprocessing模块 Process(进程) Process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 介绍 初始化参数 Process([group [, t ...

  8. python基础-守护进程、守护线程、守护非守护并行

    守护进程 1.守护子进程 主进程创建守护进程  其一:守护进程会在主进程代码执行结束后就终止  其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic pro ...

  9. Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

随机推荐

  1. apktool、dex2jar、jd-gui的区别及详解

    https://blog.csdn.net/themelove/article/details/53126360 反编译相关: apktool    作用:资源文件的获取,可以提取出图片文件和布局文件 ...

  2. 浅谈Java中的System.gc()的工作原理

    很多人把Java的“效率低下”归咎于不能自由管理内存,但我们也知道将内存管理封装起来的好处,这里就不赘述. Java中的内存分配是随着new一个新的对象来实现的,这个很简单,而且也还是有一些可以“改进 ...

  3. Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能

    今天在群里见大神们提到控件的拖动以及滑动删除的效果实现,就在网上找了资料ItemTouchHelper学习,并实现其功能.不胜窃喜之至,忍不住跟大家分享一下,如今就对学习过程做下简介.帮助大家实现这样 ...

  4. FreeBSD将SHELL从csh换成bash并支持中文显示

    刚准备在FreeBSD下学习Shell,结果发现怎么好多命令都没有,比如declare.后来发现连bash都没有,好像bash用的多一些吧,于是就准备将csh换成bash. 由于没有bash,所以先得 ...

  5. CentOS 7 换yum源

    备份原来的源 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bk 下载阿里源 $ cd /et ...

  6. What is the difference between application server and web server?

    http://stackoverflow.com/questions/936197/what-is-the-difference-between-application-server-and-web- ...

  7. ubuntu中怎样添加或删除一个PPA源

    添加PPA源的命令为:sudo add-apt-repository ppa:user/ppa-name 添加好更新一下: sudo apt-get update删除命令格式则为:sudo add-a ...

  8. 使用.NET Reflector 查看Unity引擎里面的DLL文件

    转载标注来源哦! 原地址在这里!在这里. 当你查看unity里面API的时候.是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?非常是不爽吧. 这样的问题我也是常常碰到.这是人家商业引擎不想让你看 ...

  9. weex - 创建项目

    初始化 请确保你已经安装了 Node.js,然后全局安装 weex-toolkit. npm install weex-toolkit -g 这条命令会向你命令行环境中注册一个 weex 命令.你可以 ...

  10. OpenCV学习笔记四:ImgProc模块

    一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...