进程是保存在硬盘上的程序运行之后,会在内存空间内形成一个独立的内存体,有自己的独立的内存空间,有自己的堆。操作系统以进程为单位分配(时间片、内存)等资源,进程是资源分配的最小单位。
管道(Pipe)、命名管道(FIFO)、消息队列(Message Queue) 、信号量(Semaphore) 、共享内存(Shared Memory);套接字(Socket)。
线程(轻量级进程),是操作系统调度(CPU)调度执行的最小单位。
1.进程是拥有资源的基本单位,线程是资源调度和分配的基本单位。
2.进程之间可以并发进行,同一个进程的多个线程之间也并发执行。
3.进程是拥有资源的最小单位,线程不拥有资源,但是可以访问隶属于进程的资源,进程维护的资源是内存空间,文件句柄、信号处理等。线程维护的资源是栈、调度相关的控制信息等。
4.创建进程时,系统要为其分配和回收资源,导致开销大于线程。
5.进程之间有自己独立的地址空间,一个进程崩溃之后在保护模式下不会影响其他进程,但是线程只是进程中的不同执行路径,有自己的堆栈和局部变量却没有单独的地址空间。所以多进程比多线程的程序更加健壮,但是效率差一点。
1.一个线程只属于一个进程,一个进程可以有多个线程。
2.资源分配给进程,同一个进程的线程共享进程的所有资源。
3.CPU分配给线程,真正运行的是线程
4.线程在执行过程中要实现同步,不同进程的线程之间利用消息通信的办法实现同步。
协程是比线程更加轻量级的存在,协程被用户态控制,性能提升很大。
协程在子程序内部是可以中断的,可以转而执行别的,协程在线程之中,切换很快。
协程不需要多线程的锁机制,不存在写变量冲突,协程中的共享资源不加锁,只需要判断状态就可以了。
并发:任务数量大于cpu核心数量,多个任务轮流运行,cpu切换很快,所以像是一起运行一样。
并行:cpu核心很多,多个任务同时运行。
原文:https://www.cnblogs.com/NodMouse/p/14652793.html