多进程及多线程的区别

2023-10-26

一.两者区别

多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。

(1)多进程

进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程。当你运行一个程序,你就启动了一个进程。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。

在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程,也称多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。

多任务带来的好处是明显的,比如你可以边听音乐边打游戏,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。

1.数据是分开的,共享复杂,同步简单
2.占用内存多,切换复杂,CPU利用率低
3.创建销毁复杂,切换复杂,速度慢
4.编程简单,调试简单
5.进程间不会相互影响
6.适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单

(2)多线程

线程是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径。可以说:线程是进程的子集(部分),一个进程可能由多个线程组成。

线程是独立的。如果在一个线程中发生异常,则不会影响其他线程。它使用共享内存区域。

多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享其进程资源。

1.多线程共享进程数据,共享简单,同步复杂
2.占用内存少,切换简单,CPU利用率高
3.创建销毁简单,切换简单,速度快
4.编程复杂,调试复杂
5.一个线程挂掉将导致整个进程挂掉
6.适应于多核分布

二.使用场景

1)需要频繁创建和销毁的优先用线程。

实例:web 服务器,来一个任务建立一个线程,完了就销毁线程。要是用进程,创建和销毁的代价是很高的。

2)需要进行大量计算的优先使用线程。

所谓大量计算,当然就是要消耗很多 cpu,切换频繁了,这种情况线程是最合适的。实例:图像处理、算法处理

3)强相关的处理用线程,弱相关的处理用进程。

4)可能扩展到多机分布的用进程,多核分布的用线程。

5)都满足需求的情况下,用你最熟悉、最拿手的方式。

三.通信方式

(1)进程间的通信方式
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

1.管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2.有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

3.信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也来访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4.消息队列( messagequeue ) : 消息队列存放在内核中,并由消息队列标识符标识。消息队列克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5.信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6.共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的通信 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。

7.套接字(socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

(2)线程间的通信方式

1.锁机制:包括互斥锁、条件变量、读写锁

a.互斥锁: 提供了以排他方式防止数据结构被并发修改。
b.读写锁: 允许多个线程同时读共享数据,而对写操作是互斥的。
c.条件变量: 可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

2.信号量机制(Semaphore):包括无名线程信号量和命名线程信号量.

3.信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多进程及多线程的区别 的相关文章

  • 多线程经典案例(生产者--消费者)

    多线程开发中有一个经典的操作案例 就是 生产者 消费者 案例 生产者不的生产产品 消费者不断地取走产品 此案例涉及线程同步 线程休眠 线程等待 线程唤起等操作以及之间是如何搭配使用的方法 示例讲解 本示例模拟中生产者由 厨师 担任 消费者由
  • C++多线程(七):unique_lock详解

    目录 unique lock取代lock guard unique lock的第二个参数 std adopt lock std try to lock std defer lock unique lock的成员函数 成员函数lock 成员函
  • 【JavaEE初阶】第九节.多线程 (基础篇)定时器(案例三)

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 JavaEE初阶 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 前言 一 定时器概述 二 定时器的实现 2 1 Java标准库 定时器的使用 2 2 自己模拟实现一
  • 集合在多线程下 不安全的代码案例,以及解决方法

    package thread import java util import java util concurrent ConcurrentHashMap import java util concurrent CopyOnWriteArr
  • ⛳ 面试题-单例模式会存在线程安全问题吗?

    目录 面试题 单例模式会存在线程安全问题吗 一 单例模式 简介 二 饿汉式 三 懒汉式 3 1 懒汉式 在调用 getInstance 的时候才创建对象 线程不安全 3 2 改造1 对懒汉式进行加锁改造 线程安全 3 3 改造2 对懒汉式继
  • Cpp关键字破解(三)【volatile】篇

    关键字总结 volatile 文章目录 关键字总结 volatile 0 前言 1 概念 2 作用 3 使用场景 4 volatile成员函数 5 代码体验 0 前言 参考几位前辈博客 汇总整理了一下 C 中volatile关键字的使用详解
  • futureTask RunnableFuture Future 三者关系认知

    对于这三者首先我们看下源码 之后在分别写几个demo讲解下用法 public interface RunnableFuture
  • 08C++11多线程编程之unique_lock类模板

    08C 11多线程编程之unique lock类模板 前述 如果看懂了该篇文章 你对unique lock可以说随便使用 并且可以只看第5点的总结即可 1 unique lock概念 当不加参数时 和lock guard一样能自动上锁解锁
  • Qt启动页多线程

    Qt启动页多线程 项目需要在Qt进入启动页之前加载一个大模型文件 同时要有一个页面用来提示用户加载状态 这里就需要用到多线程了 如果在单线程操作 要么需要等到文件加载完毕后才能显示等待页 要么干脆跳过了模型文件的加载 都是不符合需求的 我们
  • 如何在spring框架中解决多数据源的问题

    在我们的项目中遇到这样一个问题 我们的项目需要连接多个数据库 而且不同的客户在每次访问中根据需要会去访问不同的数据库 我们以往在 spring 和 hibernate 框架中总是配置一个数据源 因而 sessionFactory 的 dat
  • java多线程使用教程

    文章目录 如何使用多线程 继承Thread类 实现Runnable接口 线程的生命周期 线程同步 线程间通信 shutdown 方法的重要性 如何使用多线程 在Java中 创建多线程的方式有两种 一种是继承Thread类 另一种是实现Run
  • Java 线程关闭

    Java线程关闭的方式 1 使用状态位 public class CloseThread extends Thread boolean flag true int index 0 Override public void run while
  • 条件变量(condition variable)详解

    原理 假设我们需要解决这样一个问题 一个列表记录需要处理的任务 一个线程往此列表添加任务 一个线程processTask处理此列表中的任务 这个问题的一个关键点在于processTask怎么判断任务列表不为空 一般有两种方法 一 proce
  • synchronized关键字修饰static方法和非static方法学习测试结论

    最近在学习研究synchronized关键字 发现有个疑问 在同一个类中 有多个sync方法 当线程调用其中的一个方法的时候 其他的线程能调用其他的sync方法么 为此做了简单的测试 详细的测试过程略过 读者可使用测试代码自行操作 得出结论
  • 线程常见方法

    目录 线程常见的方法 设置优先级 Join方法 Sleep方法 setDaemon 线程常见的方法 starto 启动当前线程 表面上调用start方法 实际在调用线程里面的run方法 run 线程类继承Thread类或者实现Runnabl
  • 线程池用例

    线程池逻辑类 public class TaskExecutorService private final ExecutorService pool private final ThreadPoolExecutor pool private
  • iOS线程初探(四) GCD 和 NSOperation 小结

    参考资料 关于iOS多线程 看我就够了 GCD 在GCD中 有两个概念很重要 那就是任务和队列 任务 其实就是你需要做的事情 一个Block而已 任务有两种执行方式 同步执行和异步执行 同步执行 会阻塞当前线程 直至该任务执行完成后当前线程
  • 多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

    背景介绍 1 最近有一个大数据量插入的操作入库的业务场景 需要先做一些其他修改操作 然后在执行插入操作 由于插入数据可能会很多 用到多线程去拆分数据并行处理来提高响应时间 如果有一个线程执行失败 则全部回滚 2 在spring中可以使用 T
  • 多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件 支持暂停 取消 断点续传 多线程同时下载文件即 在同一时间内通过多个线程对同一个请求地址发起多个请求 将需要下载的数据分割成多个部分 同时下载 每个线程只负责下载其中的一部分 最后将每一个线程下载的部分组装起来即可 涉及的知
  • 由一个多线程共享Integer类变量问题引起的。。。

    假设并发环境下 业务代码中存在一些统计操作 为了保证线程安全 开发人员往往会对计数值进行加锁 synchronized 值得注意的是 直接对Integer类型进行加锁 似乎并不会达到预期效果 比如下面这段代码 Integer num new

随机推荐

  • 鲶鱼效应

    鲶鱼效应 鲶鱼在搅动小鱼生存环境的同时 也激活了小鱼的求生能力 鲶鱼效应是采取一种手段或措施 刺激一些企业活跃起来投入到市场中积极参与竞争 从而激活市场中的同行业企业 其实质是一种负激励 是激活员工队伍之奥秘 需要强调的一点 在某些企业中
  • 频率计的交流耦合和直流耦合的区别_数字示波器通道耦合与触发耦合的区别

    在电子电路中 将前级电路 或信号源 的输出信号送至后级电路 或负载 称为耦合 耦合的作用就是把某一电路的能量输送 或转换 到其他的电路中去 在示波器中 存在两种耦合设置 一种是通道的耦合方式 另外一种是触发的耦合方式 今天我们来详细说说这两
  • 超全的英语短句汇集

    English 900 英语九百句常用职位英文译名超级短句成语集锦打开话匣子PC电脑词汇一百个绝佳句型李阳英语365句托福听力常用短语校园英语迷你惯用语洋话连篇至理名言 English 900 英语九百句 Back To TOP 回到顶部
  • 程序包org.jdesktop.layout不存在

    下午用netbeans写程序 遇到程序包org jdesktop layout不存在的问题 我想这是netb自带的库啊 怎么会找不到了 原因我还没有找到 解决方法如下 找到安装netbeans的路径 在platform6 modules e
  • sql select 语句 转 Json

    最近有个Es查询的需求 用户在前端输入sql语句直接拼条件 然后后台去查询 因为es本身带有类sql查询 刚开始打算用sql查的 但是分页的limit只有一个查询条数 没有from和size 比如es可以通过类sql 的 limit 100
  • 保存图片到MySQL&从MySQL读取图片

    接上次 爬取坤坤表情包 这次我们直接将表情包存到MySQL数据库而不是本地 1 创建数据库 首先创建一个数据库 数据库名为ikun 表名为img 3个字段分别为id 图片id img 二进制码 date 存储时间 其中 二进制码的存储格式应
  • 【NATS streaming】NATS streaming 简介与安装

    1 概述 市面上常见到的和Nats功能类似的消息通信系统有 ActiveMQ KafKa RabbitMq Nats 之前是Ruby编写现已修改为Go Redis C语言编写 Kestrel Scala编写不常用 NSQ Go语言编写 这些
  • 记录自用的CAN开发调试工具和上位机

    文章目录 前言 二 CANable开源软硬件 三 AMP32F103 方案的自制USB2CAN 调试器 四 TTCAN USB2CANFD调试器 二 PyQT开发CAN调试器上位机 1 CAN通信速率可设 CAN CANFD可选 2 CAN
  • 网站建设如何快速建站_网站建设快速建站有哪些方法

    网站建设快速建站方法 1 JavaScript 压缩和模块打包 JavaScript 应用是以源码形式进行分发的 而源码解析的效率是要比字节码低的 对于一小段脚本来说 区别可以忽略不计 但是对于更大型的应用 脚本的大小会对应用启动时间有着负
  • 下载频道2013上半年超人气精华资源汇总---全都是免积分下载。

    http bbs csdn net topics 390526352 下载频道2013上半年超人气精华资源汇总 全都是免积分下载 十分感谢这些免积分分享精华资源的好人 Net 1 C 入门到精通加强版 2 C 类库查询手册 Android
  • 昆仑通泰历史数据导出到u盘_MCGS配方组导出到U盘案例-专业自动化论坛-中国工控网论坛...

    说实话 第一次玩昆仑通态的屏 客户要求的功能又很复杂 真是翔都出来了 为了各位同行的福祉 开始慢慢写一些实际应用上的东西 希望大家少走歧路 如果觉得有用就点个赞 觉得小儿科就 切 一声离开就好 ok 配方组导出到U盘的脚本如下 返回值10
  • 通过示例理解数据库相关概念(一、关系,元组,域,键,笛卡儿积等等)

    出发点 数据中的各种定义实在看不下去 太离散数学了 只有直接看例子了 少牺牲点脑细胞 但是 没有了严谨的定义 很多东西就只可意味不可言传了 通过例子可以用来理解数据库的离散数学式的定义 例子 Stu表 学号 姓名 性别 班级 201901
  • 腾讯云网站备案流程(2023新版教程)

    腾讯云网站备案流程先填写基础信息 主体信息和网站信息 然后提交备案后等待腾讯云初审 初审通过后进行短信核验 最后等待各省管局审核 前面腾讯云初审时间1到2天左右 最长时间是等待管局审核时间 网站备案地区不同管局审核时间也不同 快的3天即可通
  • 条件编译#ifdef用法

    这几个宏是为了进行条件编译 一般情况下 源程序中所有的行都参加编译 但是有时希望对其中一部分内容只在满足一定条件才进行编译 也就是对一部 分内容指定编译的条件 这就是 条件编译 有时 希望当满足某条件时对一组语句进行编译 而当条件不满足时则
  • 最大连续和(单调队列)

    最大连续和 题目描述 给你一个长度为n的整数序列 A1 A2 An 要求从中找出一段连续的长度不超过m的子序列 使得这个序列的和最大 输入描述 第一行为两个整数n m 第二行为n个用空格分开的整数序列 每个数的绝对值都小于1000 输出描述
  • 向大侠们求救!!! 想要显示jsp页面时出现HTTP Status 500 - An exception occurred processing JSP page

    错误描述 HTTP Status 500 An exception occurred processing JSP page main jsp at line 23 type Exception report message An exce
  • java.lang.OutOfMemoryError: GC overhead limit exceeded原因及解决

    https www cnblogs com penghongwei p 3603326 html https blog csdn net renfufei article details 77585294 https www jb51 ne
  • linux查看 rsync 服务状态,如何启动rsync服务

    linux查看 rsync 服务状态 如何启动rsync服务 root localhost lsof i tcp 873 开启状态 未开启状态 启动rsync服务命令 root localhost rsync daemon config e
  • windows 10 内存居高不下,实际没开多少进程

    windows 10 内存居高不下 实际没开多少进程 关闭快速启动 就好了
  • 多进程及多线程的区别

    一 两者区别 多进程和多线程的主要区别是 线程是进程的子集 部分 一个进程可能由多个线程组成 多进程的数据是分开的 共享复杂 需要用IPC 但同步简单 多线程共享进程数据 共享简单 但同步复杂 1 多进程 进程是程序在计算机上的一次执行活动