多线程、同步异步、阻塞非阻塞
多任务
目的
概述
形式
多进程
时间片
多线程
概念
注意点
1. 线程执行顺序为无序 : 线程的执行需要CPU的调度,谁获得CPU,谁就先执行2. 主线程会等待子线程结束后再结束让子线程随主线程的结束而结束
a. 在创建对象的时候,传入参数 :daemon= True
b. 在创建对象之后线程启动之前,调用setDaemon(True)方法
3.线程共享全局变量共享全局变量,由于不确定何时丢失CPU资源,会导致数据错乱(资源竞争)问题
程序
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。进程更能真实地描述并发,而程序不能;进程具有创建其他进程的功能,而程序没有。同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程。在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。--百度百科
处理机
处理机包括中央处理器,主存储器,输入-输出接口,加接外围设备就构成完整的计算机系统。处理机是处理计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。程序是描述处理机完成某项任务的指令序列。指令则是处理机能直接解释、执行的信息单位。
--百度百科
进程
进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。
我们编写的程序用来描述进程要完成哪些功能以及如何完成;
数据集则是程序在执行过程中所需要使用的资源;
进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
--摘录
是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
狭义:QQ.exe就是一个进程
线程
线程安全与非安全
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据,i++在多线程下累加100次得到的并不一定是100
进程和线程的关系
工厂、车间、流水线 示例:
计算机核心CPU——工厂
假定工厂电力有限——CPU资源有限,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个(单核)CPU一次只能运行一个任务。
进程——工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
车间工人——线程,多个工人协同完成一个任务。
车间空间由车间内工人共享——进程内空间,线程共享
不同空间能容纳的人数量不同——资源抢占,一个萝卜一个坑
并发和并行
区别
并发是指一个处理器同时处理多个任务。 快速切换
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上(感觉上)的同时发生(simultaneous),而并行是物理上的同时发生。
来个比喻:并发是一个人同时吃三个馒头(一个咬一下,轮流),而并行是三个人同时吃三个馒头(同时)。
并行是同时响应(多处理器),并发是轮流响应(单处理器或者多处理器)
阻塞和非阻塞
阻塞:在调用之后,应用层即刻被挂起,一直处于等待数据返回的状态,直到系统内核从磁盘读取完数据并返回给应用层,应用层才用获得的数据进行接下来的其他操作
非阻塞:调用后,系统内核会立即返回(虽然还没有文件内容的数据),应用层并不会被挂起,它可以做其他任意它想做的操作
关注的是:接口调用(发出请求)后(应用层)等待数据返回时的状态。被挂起无法执行其他操作的则是阻塞型的,可以被立即「抽离」去完成其他「任务」的则是非阻塞型的。
参考:https://zhuanlan.zhihu.com/p/22707398
同步和异步
阻塞和非阻塞解决了应用层等待数据返回时的状态问题,那系统内核获取到的数据到底如何返回给应用层呢?这里不同类型的操作便体现的是同步和异步的区别。
同步和异步关注的是:数据如何返回给应用层=》任务完成时消息通知的方式
同步:主动多次轮询,如未能得到响应数据,根据阻塞还是非阻塞看是挂起还是去做其它事情
异步:无需主动询问,响应方主动告知并返回数据
作者: deity-night
出处: https://www.cnblogs.com/deity-night/
关于作者:码农
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(***@163.com)咨询.