什么是线程、进程?
什么是进程?
1. 进程是资源分配最小单位
2. 当一个可执行程序被系统执行(分配内存等资源)就变成了一个进程
3. 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,这种执行的程序就称之为进程
4. 程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念
3. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。
4. 进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。
5. 进程之间有自己独立的内存,各进程之间不能相互访问
6. 创建一个新线程很简单,创建新进程需要对父进程进行复制
进程的优点
提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率
(多道编程概念
多道编程: 在计算机内存中同时存放几道相互独立的程序,他们共享系统资源,相互穿插运行
单道编程: 计算机内存中只允许一个的程序运行)
进程的缺点
- 进程只能在一个时间干一件事。
- 进程在执行的过程中如果阻塞,即使进程中有些工作不依赖于输入的数据,也将无法执行(例如等待输入,整个进程就会挂起)
进程间互相访问数据的四种方法
注:不同进程间内存是不共享的,所以互相之间不能访问对方数据
- 利用Queues实现父进程到子进程(或子进程间)的数据传递
- 使用管道pipe实现两个进程间数据传递
- Managers实现很多进程间数据共享
- 借助redis中间件进行数据共享
什么是线程?
1. 线程是操作系统调度的最小单位它被包含在进程之中,是进程中的实际运作单位
2. 进程本身是无法自己执行的,要操作cpu,必须创建一个线程,线程是一系列指令的集合
3. 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位
4. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
5. 无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行
6. 同一个进程中的各线程可以相互访问资源,线程可以操作同进程中的其他线程,但进程仅能操作子进程
进程和线程的区别
- 进程包含线程
- 线程共享内存空间
- 进程内存是独立的(不可互相访问)
- 进程可以生成子进程,子进程之间互相不能互相访问(相当于在父级进程克隆两个子进程)
- 在一个进程里面线程之间可以交流。两个进程想通信,必须通过一个中间代理来实现
- 创建新线程很简单,创建新进程需要对其父进程进行克隆。
- 一个线程可以控制或操作同一个进程里面的其它线程。但进程只能操作子进程。
- 线程可以帮助应用程序同时做几件事
什么是协程?
协程,又称微线程,纤程
作用
在执行一个函数的时候,可以随时停止,去执行另一个函数,然后中断再去执行第一个函数,类似于多线程,但协程只有一个线程在执行
协程的优势
协程可以很完美的处理IO密集型的问题,但是处理cpu密集型并不是他的长处。要充分发挥CPU的性能,可以结合多进程+多线程的方式。