当前位置: 首页 > article >正文

Linux 多线程:多线程和多进程的对比

目录

  • 一、多进程优缺点
  • 二、多线程优缺点
  • 三、使用多执行流的场景

  在多任务处理中,我们既可以使用多进程,也可以使用多线程。但多进程和多线程并不是随意选择的,因为它们应对的场景不同,优缺点也不同。

一、多进程优缺点

 多进程就是在程序中创建多个子进程来执行不同的分支。

 多进程的优点:

  1. 多进程的稳定性强、健壮性强。(如果子进程崩溃,不会影响父进程)
  2. 某些系统调用接口针对的是进程。
  3. 任务处理的效率高。

 多进程的缺点:

  1. 多进程间调度成本大。因为每个进程都有独立的虚拟内存和页表,调度时需要加载页表等信息。
  2. 进程创建和销毁成本大。创建进程时除了pcb,还需要创建虚拟空间和页表等信息,因此耗费比较大。

二、多线程优缺点

 多线程是在进程中划分多个执行流,每个执行流是一个线程。

多线程优点:

  1. 线程间通信很灵活。(进程间通信方式线程也可以使用,同时线程间通信方式还有全局变量和函数传参)
  2. 同一进程的线程间的调度成本很低,因为共享的是同一个虚拟内存和页表,调度时不需要重新加载页表等资源。
  3. 线程的创建和销毁成本低。创建线程只需要创建pcb,并且大部分数据共享。
  4. 任务处理效率高。

多线程缺点:

  1. 稳定性不如多进程。一个线程崩溃后,可能会影响整个程序。
  2. 同一进程的线程共用同一个虚拟内存。这样每个线程都不能随心所欲地使用空间了。

三、使用多执行流的场景

 介绍两种适合使用多执行流的场景:CPU密集型程序、IO密集型程序。

CPU密集型程序:

 (1)CPU密集是指程序对CPU的依赖程度很高,这说明程序中大部分都是数据处理,因为CPU就是用来运算的。

 (2)现在的计算机基本都是多核,所以如果将一个CPU密集型程序分为多个执行流,让每个核心执行一条执行流,那么将会大大提升数据的运算速率。

 (3)但执行流并不是越多越好,因为程序是切换调度运行的,太多的执行流意味着要经常进行调度,成本就太高了,因此要找一个合适的执行流数量。

IO密集型程序:

 (1)IO密集型程序是指程序对IO设备的依赖度很高,具有非常多的IO操作。

 (2)IO操作包含两部分:IO等待,数据拷贝。IO等待就是程序要等待IO设备资源空闲才可以使用,数据拷贝就是IO数据的操作。

 (3)CPU的处理速度很快,但IO数据的处理是从硬盘读取或写入的,速度上远远比不过CPU处理的速度,因此IO操作中耗费时间最多的步骤其实是等待IO设备。

 (4)如果只有一个执行流,假如有两个IO请求,一个A程序,一个B程序,这两个程序要使用同一个IO设备,那么就需要排队。

 (5)排队时首先进行A程序的两个阶段,然后进行B程序的两个阶段。如图:

单核心

 (6)如果有两个执行流,那么两个程序就可以同时进行IO等待,这样就能减少总体的运行时间。

多线程IO等待


http://www.kler.cn/a/4247.html

相关文章:

  • 【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)
  • 仿射密码实验——Python实现(完整解析版)
  • Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性
  • 使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用
  • 归子莫的科技周刊#2:白天搬砖,夜里读诗
  • 【redis】键的全局命令
  • ChatGPT再掀AI资本狂潮,30位科技创新VC投资者齐聚“实在智能”
  • 2023年科睿唯安官方剔除的35本SCI清单
  • 【CSS】清除浮动 ③ ( 清除浮动 - 使用 after 伪元素 | 语法简介 | 兼容低版本浏览器 | 原理分析 )
  • 深度好文,无代码平台如何解决软件开发成本居高不下?
  • 【Python】大杀器:Photon超快速帮助你搜集信息
  • 大学生问AI
  • 2023年全国最新保安员精选真题及答案34
  • Nginx——Nginx优化方案设计
  • Day929.运用自动化工具诊断分析Sharing项目 -系统重构实战
  • LeetCode1207. 独一无二的出现次数(python)
  • C++ 多线程学习
  • 眨个眼就学会了Pixi.js
  • 软件测试练手项目,以及项目操作流程
  • .NET Core6.0环境下使用Autofac框架对webAPI进行依赖注入改造
  • Python 中 如何向函数传递列表?
  • 【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”
  • 以太网 ethtool命令详解
  • 深入理解计算机系统(第三版)【阅读笔记】
  • Tomcat 内部运行原理(一)
  • 用户体验设计中的颜色