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过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...
随机推荐
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net 1. -catalog与schema的设计区别1 ...
- MII接口概念简述
MII: Medium Independent Interface 媒体独立接口,也称介质无关接口 RMII: Reduced MII 简化媒体独立接口 GMII: Gigabit Medium In ...
- 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。
/** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...
- 【转】在Eclipse中使用JUnit4进行单元测试(初级篇)
http://www.builder.com.cn/2007/0901/482336.shtml 首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的快感! 首先新 ...
- Spring MVC单选按钮
以下示例显示如何在使用Spring Web MVC框架的表单中使用单选按钮(RadioButton).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Fra ...
- redhat6.5安装postgresql8.4数据库
Redhat6.5安装postgresql8.4数据库 step1 先移除原有的postgresql数据库(如果有),否则直接跳过 rpm -qa | grep postgresql* rpm -ev ...
- 面试题:谈谈你对hibernate的理解
说说这类问题一般要和一个东西比較.说说他们的长处和缺点,hibernate就和JDBC比較呗.你就说说JDBC的优缺点.然后说说hibernate的优缺点,最后对照得出hibernate更好. hib ...
- Web里URL空格的转换方法
今天收到一个Bug修复的任务,Bug为在页面上输入一个文件夹名包含空格,点击该文件夹的URL后链接错误. 看URL是HttpUtility.UrlEncode将空格转换成了“+”号,原因找到就着手解决 ...
- 如何在xampp中运行php文件 (WINDOWS)
from:http://blog.sina.com.cn/s/blog_5e87822501011os2.html 入门: 如何在xampp中运行php文件 (WINDOWS) 安装XAMPP启动ap ...
- POJ1365 Prime Land【质因数分解】【素数】【水题】
题目链接: http://poj.org/problem?id=1365 题目大意: 告诉你一个数的质因数x的全部底数pi和幂ei.输出x-1的质因数的全部底数和幂 解题思路: 这道题不难.可是题意特 ...