一、进程

  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. C# 通过 AppDomain 应用程序域实现程序集动态卸载或加载

    AppDomain 表示应用程序域,它是一个应用程序在其中执行的独立环境.每个应用程序只有一个主应用程序域,但是一个应用程序可以创建多个子应用程序域. 因此可以通过 AppDomain 创建新的应用程 ...

  2. Hash索引和BTREE索引2

    索引是数据库中用来提高性能的最常用工具.所有MySql列类型都可以被索引.索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行.常用的 ...

  3. Jenkins安装和配置系列

    转自:http://www.cnblogs.com/zz0412/tag/jenkins/default.html?page=1 Jenkins进阶系列之——18Jenkins语言本地化    Jen ...

  4. SQL数据库查询练习题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  5. UI-2-UILabel&UIImageView-补充

    课程要点: 控件之间的继承关系. UILabel UIImageView 利用UIImageView实现帧动画 补充 试图之间的继承关系 昨天学习UIView的时候,了解到UIView里面有以下几个常 ...

  6. iOS多线程(转)

    关于iOS多线程,你看我就够了 字数8596 阅读28558 评论74 喜欢313 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例 ...

  7. 我的 Android 开发实战经验总结

    我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...

  8. go http的三种实现---3

    package main //效率最高的一个方法 import ( "fmt" "io" "log" "net/http" ...

  9. Ninject学习笔记<三>

    ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开 ...

  10. [Spring MVC]学习笔记--@RequestMapping

    @RequestMapping是用来将请求的url,映射到整个类,或者里面的方法. @Controller @RequestMapping("/test") public clas ...