多进程编程 VS 多线程编程

news2025/7/19 21:01:51

目录

一、进程 & 线程

二、进程与线程的优劣势

三、在什么场景下需要使用多进程编程?


进程也可以称为是“任务”。操作系统要想执行一个具体的“动作”,就需要创建出一个对应的进程。

一个程序在没有运行的时候,它仅仅是一个“可执行的文件”,一旦程序跑起来了,就变成了一个进程了。

 为了实现并发编程,同时执行多个任务,就引入了“多进程编程”。把一个很大的任务,拆分成若干个很小的任务,就可以创建多个进程,每个进程分别负责其中的一部分任务。

 多进程编程也带来了一个很大的问题:创建/销毁进程,比较重量或比较低效。

为了避免这样的问题,就引入了线程。

每个线程都是一个独立的执行流。一个进程包含了一个或多个线程。我们的初心就是为了能够实现并发,多个进程能够实现并发,同样多个线程也能实现并发。但是多线程要比多进程更加高效和轻量。创建线程/销毁线程比创建进程/销毁进程更加高效和轻量。所以,一般情况下,会使用多线程来进行开发。

因此,在Java这个圈子里面,大部分的并发编程都是通过多线程的方式来实现的。

难道多进程就一无是处吗?

当然不是,多进程也有它自己独特的优势。

进程相比于线程的优势:

进程的“独立性”更好。比如在操作系统上,同一时刻运行着很多个进程:

同一时刻可能同时运行着成百上千的进程,但是每个进程之间都不相互干扰,如果某一个进程挂了不会影响到其他的进程,因为每个进程有各自的地址空间。每个进程之间井水不犯河水,自己经营着自己的一亩三分地,由我们的操作系统统一进行统筹管理,如果某个进程出现了一些意外,无法正常工作,直接奔溃了,那么也仅仅是这个进程自身挂了,不会出现把其他进程也带走的情况。所以说,进程“独立性”这一点是非常重要的。

相比之下,由于多个线程之间,共用着一个进程的地址空间。这就导致了某个线程挂了,就很可能会直接把整个进程带走,那么这个进程里面的其他线程也就没了。

正是因为这一点,进程要比线程来的更加稳定一点。虽然进程没有线程那么高效,但是它的独立性带来的稳定是非常关键的。

多进程编程主要做的事情:

站在操作系统的角度(以Linux为例),提供了很多和多进程编程相关的接口:进程创建、进程终止、进程等待、进程程序替换、进程间通信......

而在Java中对系统提供的这些操作进行了限制,最终给用户只提供了两个操作:进程创建和进程等待。虽然功能受限,但是当前也是足够用了。

案例分析:

比如有一个类似在线OJ刷题的平台,那么它就有一个服务器进程(接受用户的请求,返回响应),用户提交的代码其实也是一个独立的逻辑,那么这个逻辑是使用多线程执行好,还是多进程呢?

那么对于这里用户提交的代码,一定是要通过“多进程”的方式来执行的!!!因为我们无法控制用户到底提交了什么代码,代码很可能是存在问题的,很可能一运行就会出现崩溃的情况。那么如果使用多线程,就很可能会导致用户代码直接把整个服务器进程都给带走了的情况。因为一个服务器同时要给很多个用户提供服务,但是不能因为一个用户问题就挂了服务器,导致其他用户也访问不了。而且在真实情况下,用户是非常非常多的,是不能保证每一个用户的代码都是没毛病的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCE学习 --- 第六次作业

RHCE学习 — 第六次作业 首先要先装DNS服务器需要的包 [rootlocalhost ~]# yum install bind -y然后开始配置DNS服务 配置文件位置在/etc/named.conf下,建议先备份 注:备份的时候要cp -a,否则所属组会变,导致文件不可用 然后编辑…

WinForm,可能是Windows上手最快的图形框架了

文章目录Label和控件属性按钮和回调逻辑事件常用控件Label和控件属性 WinForm是一门非常经济实惠的技术,就是说,可以在短时间内学会,并迅速借此进行项目开发。尽管在很多方面不够现代,做出来的东西又Low又丑,但绝大多…

Redis的优惠券秒杀问题(六)超卖问题、一人一单问题

Redis的优惠券秒杀问题(六)超卖问题、一人一单问题 超卖问题 问题描述 使用Jmeter进行压测 发生超卖问题原因分析 解决方案 悲观锁与乐观锁 1. 版本号 2. CAS法 CAS三大问题(题外话!) CAS三大问题的解…

误差和梯度下降

Datawhale开源学习,机器学习课程,项目地址:https://github.com/datawhalechina/leeml-notes 之前讲了线性模型,提到了误差,那么误差来自哪里?本节内容将介绍「偏差」、「方差」对模型拟合度的影响&#xff…

西电计组II 实验1

西电计组II 实验1 文章目录西电计组II 实验18086汇编 IO操作环境搭建8086汇编 helloworldassumesegmentdb编译链接lstmapobjexesymdobint 21H 软件中断程序设计要求全局变量函数设计putchargetcharprintnewlineinputmemsetexithexbinarycircle程序入口完整代码8086汇编 IO操作 …

wav to image 的数据集制作代码

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

python+django网吧会员管理系统

系统项目截图 本网吧管理系统主要包括三大功能模块,即管理员、会员、网管。 (1)管理员模块:首页、个人中心、会员管理、网管管理、商品类型管理、商品信息管理、购买商品信息管理、呼叫网管管理、电脑信息管理、用户上机管理、用户…

汇编语言外中断

外中断 文章目录外中断1.外中断概念2.PC机键盘的处理过程1.外中断概念 CPU在计算机系统中,除了能够执行指令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出(I/O能力&#xff0…

如何把家装修出温馨的感觉?极家好不好

如何把家装修出温馨的感觉?极家好不好?想要让家变成理想的样子!如何进行! 第一步:找一个靠谱的装修团队,特别重要的是项目经理,极家好不好这个真的真的真的很重要‼️ 一个好的装修团队&#xf…

Windbg可以看到Visual Studio中看不到的有效函数调用堆栈

目录 1、Visual Studio中看不到有效的函数调用堆栈 2、使用Windbg调试运行主程序,看到了有效的函数调用堆栈 3、根据函数名和行号去查看对应的C源码,定位问题 4、总结 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持…

Frechet distance距离计算原理及python实现

Frechet distance概念 弗雷彻距离(Frechet distance)定义了一种考虑位置和点的次序的计算两条曲线相似度的方法,常用于时间序列相似度度量和轨迹序列相似度度量。该指标的算法可用the walking dog problem来描述:想象一个人用牵引带遛狗的同时&#xff0…

“碳”零排放是什么意思

在气候变化问题上拖拖拉拉之后,澳大利亚联邦政府终于承诺到 2050 年实现净零排放,世界其他大部分地区也是如此。几乎所有发达经济体现在都加强了 2030 年目标,并承诺在本十年将排放量大致减半。 需要记住的重要一点是,如果没有本…

abbyy finereader2023泰比文字识别PDF编辑软件

近年来,随着盲人数字阅读的普及推广,PDF格式的电子书越来越受到大家的关注和喜爱,但受读屏软件功能的限制,扫描版的PDF电子书是无法直接阅读的,这就需要将其转换为可阅读的文档格式,可对于大多数视障读者来…

Linux基本指令1

系统内核:Centos 7.6 64位操作系统(OS, operating system)是什么?世界上第一台计算机诞生的时候是没有操作系统的,但是这个计算机操作起来效率特别低,难度非常高。使用对象只有科学家。操作系统的意义就在于降低操作难度&#…

数据库高级 V

数据库高级 V 1.JVM内存结构,JVM调优,GC常用算法 如何调整堆内存大小,以及调整各年代之间的比例,更换GC 修改JVM堆大小方式: 找到Idea安装目录下的-->bin-->idea.exe.vmoptions -server -Xms128m //堆初始大小 -Xmx512m //最大堆内存 -XX:ReservedCodeCacheSize240m -XX…

[附源码]计算机毕业设计JAVA花卉销售管理系统

[附源码]计算机毕业设计JAVA花卉销售管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

Linux umask命令详解,Linux修改文件默认访问权限

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 umask命令一、查看umask值二、临时修改umask值三、永久修改umask值四、文件和目录的默认权限五、权限数值对照表六、常用umask值及对应权限七…

最近公共祖先(朴素法、倍增法、(递归法))

目录 一、前言 二、题一:二叉树的最近公共祖先 1、上链接 2、基本思路 (1)朴素法 (2)LCA倍增法。 3、朴素法代码 (1)C(AC) (2)python&am…

1.2 极限的性质【极限】

1.2 极限的性质【极限】 1.2.1 唯一性 极限的唯一性 引入 假设警察逮捕罪犯,把犯人追到了悬崖边上,那么犯人只能在悬崖边束手就擒,这个时候悬崖边是犯人逃跑的极限位置,别无去处,位置唯一。 考试或比赛的时候都努…

web前端开发技术纯静态 (12306官网 1页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS&#…