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.mfbz.cn/a/3371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring - Spring 注解相关面试题总结

文章目录01. Spring 配置方式有几种?02. Spring 如何实现基于xml的配置方式?03. Spring 如何实现基于注解的配置?04. Spring 如何基于注解配置bean的作用范围?05. Spring Component, Controller, Repository, Service 注解有何区别…

【数据结构】堆

文章目录前言堆的概念及结构堆初始化堆的判空堆的销毁插入数据删除数据堆的数据个数获取堆顶数据用数组创建堆对数组堆排序有关topk问题整体代码展示写在最后前言 &#x1f6a9;前面了解了树&#xff08;-> 传送门 <-&#xff09;的概念后&#xff0c;本章带大家来实现一…

手机验证发送及其验证(基于springboot+redis)保姆级

在Java开发中&#xff0c;发送手机验证码时需要考虑以下几个问题&#xff1a; 验证码的有效期&#xff1a;验证码应该有一定的有效期&#xff0c;一般设置为几分钟或者十几分钟。过期的验证码应该被认为是无效的&#xff0c;不能用于验证用户身份。手机号码格式的校验&#xf…

软测界的黑科技,难道不来瞧瞧?

写在前面&#xff1a; 在当今互联网时代&#xff0c;软件已经渗透到了人们生活的方方面面&#xff0c;各种类型的软件应运而生&#xff0c;为人们的工作和生活提供了更便捷的服务。然而&#xff0c;随着软件的不断增长和复杂性的不断提高&#xff0c;软件测试变得越来越重要。…

如何成为优秀的程序员

崔宝秋&#xff0c;现任小米首席架构师、小米云平台负责人。1995年赴美留学&#xff0c;纽约州立大学石溪分校计算机科学系博士毕业&#xff0c;曾任IBM高级工程师和高级研发经理、雅虎搜索技术核心团队主任工程师、LinkedIn主任工程师&#xff0c;2012年回国加入小米科技。 20…

安全防御之入侵检测篇

目录 1.什么是IDS&#xff1f; 2.IDS和防火墙有什么不同&#xff1f;3.IDS的工作原理&#xff1f; 4.IDS的主要检测方法有哪些&#xff1f;请详细说明 5.IDS的部署方式有哪些&#xff1f; 6.IDS的签名是什么意思&#xff1f;签名过滤器有什么用&#xff1f;例外签名的配置作…

性能测试(三)----loadrunner的使用

一)Controller的使用: 1)在VUG中针对写好的脚本创建场景: 2)手动打开Controller进行脚本的添加并创建场景: 点击完成之后直接打开Controller所在的组件 3)针对场景来进行设置: Basic schedule:点击这个选项进行设置 可手动修改每个用户组的Quantity来修改并发用户总量 3.1)初始…

css绘制一个Pinia小菠萝

效果如下&#xff1a; pinia小菠萝分为头部和身体&#xff0c;头部三片叶子&#xff0c;菠萝为身体 头部 先绘制头部的盒子&#xff0c;将三片叶子至于头部盒子中 先绘制中间的叶子&#xff0c;利用border-radius实现叶子的效果&#xff0c;可以借助工具来快速实现圆角的预想…

ChatGPT常用开源项目汇总

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

基于jmeter+perfmon的稳定性测试记录

最近承接了项目中一些性能测试的任务&#xff0c;因此决定记录一下&#xff0c;将测试的过程和一些心得收录下来。 说起来性能测试算是软件测试行业内&#xff0c;有些特殊的部分。这部分的测试活动&#xff0c;与传统的测试任务差别是比较大的&#xff0c;也比较依赖工具&…

c++之模板入门详解(五千字长文详解)

c之模板入门详解 文章目录c之模板入门详解泛型编程函数模板函数模板概念函数模板格式模板的原理函数模板的实例化模板实例化的个数对于同不同类型的传参&#xff01;如何处理这个问题呢&#xff1f;关于具体存在的函数和模板函数的优先级问题&#xff01;类模板类模板的用法&am…

若依框架 --- ruoyi 表格的设置

表格 字典值转换 (1) 方式1&#xff1a;使用字典枚举的方式 var isDownload [[${dict.getType(YES_OR_NO)}]];{field : isDownload,title : 是否允许下载,formatter: function(value, row, index) {return $.table.selectDictLabel(isDownload, value);} }, (2) 方式2&…

Java正则表达式及Pattern与Matcher使用详解

文章目录一、正则表达式详解1、符号定义&#xff08;1&#xff09;基本书写符号&#xff08;2&#xff09;限定符&#xff08;3&#xff09;匹配字符集&#xff08;4&#xff09;分组构造&#xff08;5&#xff09;字符转义2、常用正则表达式举例3、Java中RegularExpressionVal…

flutter 输入时插入分隔符

每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…

【Linux】虚拟地址空间

进程地址空间一、引入二、虚拟地址与物理内存的联系三、为什么要有虚拟地址空间一、引入 对于C/C程序&#xff0c;我们眼中的内存是这样的&#xff1a; 我们利用这种对于与内存的理解看一下下面这段代码&#xff1a; 运行结果&#xff1a; 观察父子进程中 val 变量的值&…

uniapp中使用百度地图(初学者保姆式教学,持续更新)

uniapp中使用百度地图(保姆式教学&#xff0c;从零开始) 最近在写一个移动端的地图项目&#xff0c;也是首次完整的去了解百度地图api&#xff0c;这篇博客会手把手的教你如何使用百度地图api和一些常见问题&#xff0c;后续我也会继续更新完善此博客 1、百度地图api&#xf…

实验九 TSP问题

《算法设计与分析》实验报告 所在院系 计算机与信息工程学院 学生学号 学生姓名 年级专业 2020级计算机科学与技术 授课教师 彭绪富 学 期 2022-2023学年第一学期 提交时间 2022年10月26日 目 录 实验九-1&#xff1a;TSP问题 一、实验目的与要求 二…

html+css制作

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>校园官网</title><style type"text/css">*{padding: 0;margin: 0;}#logo{width:30%;float: left;}.nav{width: 100%;height: 100px;background-color…

mybatis如何解析常用的标签

通过这三行就解析好了一个mybatis配置文件&#xff0c;我们看看如何工作的&#xff1f; String resource "mybatis-config.xml"; Reader reader Resources.getResourceAsReader(resource); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().b…

【进阶C语言】qsort库函数(详解)

qsort库函数1. qsort到底是什么&#xff1f;2. qsort库函数的功能3. qosrt函数详解4. 冒泡排序的实现5. qsort库函数如何实现冒泡排序6. qsort库函数排序结构体数据7. 使用冒泡排序的思想来实现类似于qsort1. qsort到底是什么&#xff1f; qsort是C语言库函数里面的一种&#x…
最新文章