python基础23 -----进程和线程
一、进程
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 -----进程和线程的更多相关文章
- python基础之进程、线程、协程篇
一.多任务(多线程) 多线程特点:(1)线程的并发是利用cpu上下文的切换(是并发,不是并行)(2)多线程执行的顺序是无序的(3)多线程共享全局变量(4)线程是继承在进程里的,没有进程就没有线程(5) ...
- python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- Java多线程基础:进程和线程之由来
转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...
- 二十三. Python基础(23)--经典类和新式类
二十三. Python基础(23)--经典类和新式类 ●知识框架 ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object): ...
- 1、Java多线程基础:进程和线程之由来
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...
- python基础(16)-进程&线程&协程
进程之multiprocessing模块 Process(进程) Process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 介绍 初始化参数 Process([group [, t ...
- python基础-守护进程、守护线程、守护非守护并行
守护进程 1.守护子进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic pro ...
- Python 中的进程、线程、协程、同步、异步、回调
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...
随机推荐
- SDRAM驱动篇之简易SDRAM控制器的verilog代码实现
在Kevin写的上一篇博文<SDRAM理论篇之基础知识及操作时序>中,已经把SDRAM工作的基本原理和SDRAM初始化.读.写及自动刷新操作的时序讲清楚了,在这一片博文中,Kevin来根据 ...
- Avira Free Antivirus 小红伞免费杀毒软件广告去除工具
Avira Free Antivirus 小红伞免费杀毒软件经常跳出广告, 用起来比较烦, 这里提供一个广告去除的免费小工具. 原理就是用组策略来阻止广告的跳出, 网上到处都是. 一键傻瓜式去除, 也 ...
- ARM处理器的运行模式
ARM处理器的7种运行模式 用户模式( usr ):ARM处理器正常的程序执行状态: 快速中断模式( fiq ):用于高速数据传输或通道处理: 外部中断模式( irq):用于通常的中断处理: 管理模式 ...
- jquery的val()
jQuery 属性操作 - val() 方法 jQuery 属性操作参考手册 实例 设置输入域的值: $("button").click(function(){ $(": ...
- http加密原理
HTTPS原理 客户端向服务器发送请求 服务器向客户端发送自己的证书 客户端验证证书的有效性(是否是可信用机构CA颁发的证书,如果不是则提出警告)并对比里面信息是否正确,不通过则立刻断开连接 向服务器 ...
- Hash索引和BTREE索引2
索引是数据库中用来提高性能的最常用工具.所有MySql列类型都可以被索引.索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行.常用的 ...
- Android Studio 使用笔记: 重命名和重构
重命名 选中一个变量名称,菜单才是可用状态.然后可以根据系统给出的建议或者自己重新定义变量名称. 快捷键:Shift + F6 (Windows和Mac都是一样的) 重构 选中需要重构的代码,可以按照 ...
- C#网络编程系列文章(五)之Socket实现异步UDPserver
原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...
- Linux Linux常用命令一
ls-查看文件信息 -ls是英文单词list的简写,其功能为列出目录的内容,使用户最常用的命令之一 -它类似于DOS下的dir命令 ls[参数] 目录或文件 常用的参数及含义 "-a&quo ...
- Hibernate生成器类
在Hibernate中,id元素的<generator>子元素用于生成持久化类的对象的唯一标识符. Hibernate框架中定义了许多生成器类. 所有的生成器类都实现了org.hibern ...