爬虫(四)进程、线程、携程的定义以及性能的比较

597次阅读
没有评论
爬虫(四)进程、线程、携程的定义以及性能的比较

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性能还是比较高.

总体来看 ,多线程是最佳人选

 

 

 

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-28发表,共计1360字。
新手QQ群:570568346,欢迎进群讨论 Python51学习