理解进程、线程与携程的基本概念及其性能对比
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性能还是比较高.
总体来看 ,多线程是最佳人选
上一篇: 进程?线程?协程?
推荐阅读
-
【摩尔线程+Colossal-AI强强联手】MusaBert登上CLUE榜单TOP10:技术细节揭秘 - 技术实力:摩尔线程凭借"软硬兼备"的技术底蕴,让MusaBert得以从底层优化到顶层。其内置多功能GPU配备AI加速和并行计算模块,提供了全面的AI与科学计算支持,为AI推理和低资源条件下的大模型训练等场景带来了高效、经济且环保的算力。 - 算法层面亮点:依托Colossal-AI AI大模型开发系统,MusaBert在训练过程中展现出了卓越的并行性能与易用性,特别在预处理阶段对DataLoader进行了优化,适应低资源环境高效处理海量数据。同时,通过精细的建模优化、领域内数据增强以及Adan优化器等手段,挖掘和展示了预训练语言模型出色的语义理解潜力。基于MusaBert,摩尔线程自主研发的MusaSim通过对比学习方法微调,结合百万对标注数据,MusaSim在多个任务如语义相似度、意图识别和情绪分析中均表现出色。 - 数据资源丰富:MusaBert除了自家高质量语义相似数据外,还融合了悟道开源200GB数据、CLUE社区80GB数据,以及浪潮公司提供的1TB高质量数据,保证模型即便在较小规模下仍具备良好性能。 当前,MusaBert已成功应用于摩尔线程的智能客服与数字人项目,并广泛服务于语义相似度、情绪识别、阅读理解与声韵识别等领域。为了降低大模型开发和应用难度,MusaBert及其相关高质量模型代码已在Colossal-AI仓库开源,可快速训练优质中文BERT模型。同时,通过摩尔线程与潞晨科技的深度合作,仅需一张多功能GPU单卡便能高效训练MusaBert或更大规模的GPT2模型,显著降低预训练成本,进一步推动双方在低资源大模型训练领域的共享目标。 MusaBert荣登CLUE榜单TOP10,象征着摩尔线程与潞晨科技联合研发团队在中文预训练研究领域的领先地位。展望未来,双方将携手探索更大规模的自然语言模型研究,充分运用上游数据资源,产出更为强大的模型并开源。持续强化在摩尔线程多功能GPU上的大模型训练能力,特别是在消费级显卡等低资源环境下,致力于降低使用大模型训练的门槛与成本,推动人工智能更加普惠。而潞晨科技作为重要合作伙伴,将继续发挥关键作用。
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
理解进程、线程与携程的基本概念及其性能对比
-
理解进程与线程的基本概念及其差异