线程 、进程、协程 三者区别
1.并行和并发
在介绍进程、线程和协程这三个概念之前,有两个操作系统中的相关概念需要简单解释一下:并行和并发。
并行:指多个任务同时执行。
并发:指在一个时间段内,多个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(即多个任务在同一处理机上交替执行)。
2. 进程: 通俗理解一个运行起来的程序或者软件叫做进程
2.1 每次启动一个进程都需要向操作系统索要运行资源,让进程中的线程去执行对应的代码,进程是操作系统分配资源的基本单位
2.2 默认情况下一个进程只有一个线程,线程是依附在进程里面的, 没有进程就没有线程, 当在进程里面还可以创建多个线程
3.线程:线程的出现是为了减少任务切换的消耗,提高系统的并发性,实现让一个进程也能执行多个任务。
3.1 线程(thread)是在进程之后发展出来的概念。线程包含在进程中,也叫轻量级进程。线程是进程中一个单一顺序的控制流,像“线”一样(或许是其译名的由来),它是系统进行运算调度(即如何分配CPU去执行不同任务)的基本单位,一个进程的多个线程在执行不同任务的同时共享进程的系统资源(如虚拟地址空间,文件描述符等),如果把进程比作一个正在生产产品的车间,那么线程就好比是车间里面执行不同任务的工人,也可把进程比作道路,而线程就好比是并行的车道。线程由相关堆栈寄存器和线程控制块组成。
4. 进程和线程的对比
4.1 进程是操作系统资源分配的基本单位,每启动一个进程都需要向操作系统索要运行资源,默认一个进程只有一个线程,线程是依附在进程里面的
4.2 线程是cpu调度的基本单位, 通过线程去执行进程中代码, 线程是执行代码的分支
4.3 多进程开发比单进程多线程开发稳定性要强,但是多进程开发比多线程开发资源开销要大
4.4 多进程开发某个进程死了不会影响其它进程的运行,但是多线程开发该进程死了那么这些线程都要进行销毁
优点:线程切换的开销比进程切换的开销小,减少了任务切换的消耗,提高了操作系统的并发性能。
缺点:相比进程不够稳定,多线程在操作共享数据时容易出错(比如丢失数据、产生死锁)
5、协程:用户态的轻量级线程
5.1 什么是协程
协程是一种用户态的轻量级线程,又称"微线程",英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。
协程的特点在于是一个线程执行,与多线程相比,其优势体现在:
协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显,在处理大规模并发连接(IO密集型任务)时,协程要优于线程。
协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。
Tips:利用多核CPU最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。