1.什么是进程、线程、协程?区别?优缺点?
定义:
(1)进程是系统进行资源分配和调度的独立单位
(2)线程是进程的实体,是CPU调度和分配的基本单位
(3)协程,又称微线程,自带CUP上下文,是比线程更小的执行单元,占用资源小,效率高
区别:
(1)一个程序至少有一个进程,一个进程至少有一个线程
(2)线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高
(3)进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序的运行效率
(4)线程不能够独立执行,必须依存在进程总
优缺点:
进程:
优点:顺序程序的特点:既有封闭性和可再现性
程序的并发执行和资源共享,多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率
缺点:操作系统调度切换多个线程比切换调度进程在速度上快的多,而且进程间内存无法共享,通讯也比较麻烦。
线程之间由于共享进程内存空间,所以交换数据非常方便,在创建或撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销
线程:
优点:
它是一种非常”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能会有较大的区别;线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;
缺点:调用时,要保存线程状态,频繁调度,需要占用大量的机时
程序设计上容易出错(线程同步问题)
2.多进程、多线程优缺点
1.多线程的优点:
无需跨进程边界
程序逻辑和控制方式简单
所有线程可以直接共享内存和变量等
线程方式消耗的总资源比进程方式好
缺点:
每个线程与主程序共用地址空间,受限于2GB地址空间
线程之间的同步和加锁控制比较麻烦
一个线程的崩溃可能影响到整个程序的稳定性
到达一定的线程数程度后,即使再增加cpu也无法提高性能
线程能够提高的总性能有限,并且线程多了之后,线程本身的调度也是一麻烦事情,需要消耗较多的CPU
3.针对于爬虫 应 选择多线程还是多进程?
多进程:密集CPU任务,需要充分使用多核CPU资源(服务器,大量的并行计算的时候)用多进程
缺点:多个进程之间通信成本高,切换开销大
多线程:密集I/O任务(网络I/O 磁盘I/O 数据库I/O)使用多线程合适
缺点:同一个时间切片只能运行一个线程,不能做到高并行,但是可以做到高并发
协程:又称微线程,在单线程上执行多个任务,用函数切换,开销极小,不通过操作系统调度,没有线程。进程的切换开销
多线程请求返回是无序的,哪个线程有数据返回就处理哪个线程,而协程返回的数据是有序的
缺陷:单线程执行,处理密集CPU和本地磁盘IO的时候,性能较低。处理网络I/O性能还是比较高.
总体来看 ,多线程是最佳人选