我们先来看他们的概念:
进程: 通俗理解一个运行起来的程序或者软件叫做进程,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元
线程:是在我们创建一个进程的同时创建了一个线程。通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
协程:有的人喜欢称为纤程(Fiber),或者绿色线程(GreenThread)。其实最直观的解释可以定义为线程的线程。
因此我们可以从字面意思来看,就很好理解。
进程和线程的对比:
1 进程是操作系统资源分配的基本单位,每启动一个进程都需要向操作系统索要运行资源,默认一个进程只有一个线程,线程是依附在进程里面的
2 线程是cpu调度的基本单位, 通过线程去执行进程中代码, 线程是执行代码的分支
3 多进程开发比单进程多线程开发稳定性要强,但是多进程开发比多线程开发资源开销要大
4 多进程开发某个进程死了不会影响其它进程的运行,但是多线程开发该进程死了那么这些线程都要进行销毁
因此也就有了“并发”与“并行”
并发: 任务数大于cpu的核数,多个任务轮流执行,由于cpu切换速度特别快,看起来像是一起运行,其实是假象。
并行: 任务数小于或者等于cpu的核数,那么多个任务是真正意义一起执行。
先有进程,然后进程可以创建线程,线程是依附在进程里面的, 线程里面可以包含多个协程
进程之间不共享全局变量,线程之间共享全局变量,但是要注意资源竞争的问题
多进程开发比单进程多线程开发稳定性要强,但是多进程开发比多线程开发资源开销要大
多线程开发线程之间执行是无序的,协程之间执行按照一定顺序交替执行
协程以后主要用在网络爬虫和网络请求,开辟一个协程大概需要5k空间,开辟一个线程需要512k空间, 开辟一个进程占用资源最多