一.定义
进程:具有独立功能的程序在某个数据集合上执行一次的过程。
线程:是进程内一个执行实体或执行单元。 比进程更小的能独立运行的基本单位,是操作系统能够进行运算调度的最小单位。
协程:本质上是一种控制抽象,简洁优雅的实现一些控制行为,在协程中,控制行为可从当前执行上下文跳转到程序其他位置,并且可以在之后任意时刻恢复当前执行上下文,从跳出点继续执行。
二.区别与联系
1.进程和线程的区别和联系
进程:启动进程,系统会为进程分配一个独立的地址空间, 各个进程之间相互不影响,一个进程结束不会影响另外一个进程。
线程:线程是在进程下运行的,一个进程可以包含多个线程,线程是共享进程中的数据,使用相同的地址空间,同一进程下并发的线程可以共享数据。一个线程死掉,整个进程死掉(linux中SIGSEGV),一个进程死掉,不会对别的进程造成影响。
2.多线程和多协程的区别和联系
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
简单来说:线程是程序中一个单一的顺序控制流程;而多线程就是在单个程序中同时运行多个线程来完成不同的工作。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在同一时间需要完成多项任务的时候实现的。
协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。
一个主线程中多个协程相互协作,完成调度,比如子程序A读取数据库数据,此时cpu等待结果,就协程内部切换到执行函数B,过段时间再返回A,接受结果进行下一步,这就是协程,减小了内存开销。
多线程的优缺点
优点:
1)、多线程技术可以加快程序的运行速度,使程序的响应速度更快,因为用户界面可以在进行其它工作的同时一直处于活动状态
2)、可以把占据长时间的程序中的任务放到后台去处理,同时执行其他操作,提高效率
3)、当前没有进行处理的任务时可以将处理器时间让给其它任务
4)、可以让同一个程序的不同部分并发执行,释放一些珍贵的资源如内存占用等等
5)、可以随时停止任务
6)、可以分别设置各个任务的优先级以优化性能
缺点:
1)、因为多线程需要开辟内存,而且线程切换需要时间因此会很消耗系统内存。
2)、线程的终止会对程序产生影响
3)、由于多个线程之间存在共享数据,因此容易出现线程死锁的情况
4)、对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。
线程和协程的总结
线程切换:假设cpu处理时间无限重,直接用时钟中断打断运算切走(保证别的应用也在正常运行)
协程切换:io所需的时间无限长,而cpu处理时间无限快,函数在io请求的时候,将cpu切走去处理别的数据