线程和进程的区别是什么?

article/2025/10/30 23:02:26

本文转载自知乎

文章目录

  • 1.进程和线程的定义
  • 2.二者的区别(解释1)
  • 3.两者的区别(解释2)


1.进程和线程的定义

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

2.二者的区别(解释1)

来源:知乎

以下转载自biaodianfu的文章。

类似“进程是资源分配的最小单位,线程是CPU调度的最小单位”这样的回答感觉太抽象,都不太容易让人理解。做个简单的比喻:
进程=火车,
线程=车厢线程在进程下行进(单纯的车厢无法运行

一个进程可以包含多个线程(一辆火车可以有多个车厢)不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)

同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)

进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)

进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢与前一节产生断裂,将影响后面的所有车厢)进程可以拓展到多机,

进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)

进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”

进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

3.两者的区别(解释2)

来源:知乎
本文转载自人民邮电出版社

线程和进程有什么区别?可以说是程序员必须准备的一道高频面试题。相信不少程序员在面试算法或开发岗位时都遇到过这个问题。尽管这个问题似乎每个接触过计算机操作系统的人都应该懂,但是如何能回答好这个问题却十分考验程序员的水平。为了能够给出一个全面而深入的答案,首先我们要理解线程的概念,以及为什么需要线程编程。什么是线程呢?网上一般是这样定义的:线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。这么说,你听懂了吗?我觉得这样的定义纯粹是自说自话:新手看完了一脸懵,老鸟看完了不以为然。我们还是用“非专业”的外行话来解释一下吧。
假设你经营着一家物业管理公司。最初,业务量很小,事事都需要你亲力亲为。给老张家修完暖气管道,立马再去老李家换电灯泡——这叫单线程,所有的工作都得顺序执行。后来业务拓展了,你雇佣了几个工人,这样,你的物业公司就可以同时为多户人家提供服务了——这叫多线程,你是主线程。
工人们使用的工具,是物业管理公司提供的,这些工具由大家共享,并不专属于某一个人——这叫多线程资源共享。工人们在工作中都需要管钳,可是管钳只有一把——这叫冲突。解决冲突的办法有很多,比如排队等候、等同事用完后的微信通知等——这叫线程同步。你给工人布置任务——这叫创建线程。之后你还得要告诉他,可以开始了,不然他会一直停在那儿不动——这叫启动线程(start)。如果某个工人(线程)的工作非常重要,你(主线程)也许会亲自监工一段时间,如果不指定时间,则表示你会一直监工到该项工作完成——这叫线程参与(join)。业务不忙的时候,你就在办公室喝喝茶。下班时间一到,你群发微信,所有的工人不管手头的工作是否完成,都立马撂下工具,跟你走人。因此如果有必要,你得避免不要在工人正忙着的时候发下班的通知——这叫线程守护属性设置和管理(daemon)。再后来,你的公司规模扩大了,同时为很多生活社区服务,你在每个生活社区设置了分公司,分公司由分公司经理管理,运营机制和你的总公司几乎一模一样——这叫多进程,总公司叫主进程,分公司叫子进程。总公司和分公司,以及各个分公司之间,工具都是独立的,不能借用、混用——这叫进程间不能共享资源。各个分公司之间可以通过专线电话联系——这叫管道。各个分公司之间还可以通过公司公告栏交换信息——这叫进程间共享内存。另外,各个分公司之间还有各种协同手段,以便完成更大规模的作业——这叫进程间同步。分公司可以跟着总公司一起下班,也可以把当天的工作全部做完之后再下班——这叫守护进程设置。进程有什么用?进程可以说是一个“执行中的程序”。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。有了线程技术,我们就可以在一个进程中创建多个线程,让它们在“同一时刻”分别去做不同的工作了。这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。
不过,多线程技术不是万金油,它有一个致命的缺点:在一个进程内,不管你创建了多少线程,它们总是被限定在一颗CPU内,或者多核CPU的一个核内。这意味着,多线程在宏观上是并行的,在微观上则是分时切换串行的,多线程编程无法充分发挥多核计算资源的优势。这也是使用多线程做任务并行处理时,线程数量超过一定数值后,线程越多速度反倒越慢的原因。
多进程技术正好弥补了多线程编程的不足,我们可以在每一颗CPU上,或者多核CPU的每一个核上启动一个进程,如果有必要,还可以在每个进程内再创建适量的线程,最大限度地使用计算资源解决问题。因为不在同一块内存区域内,和线程相比,进程间的资源共享、通信、同步等,都要麻烦得多,受到的限制也更多。
本文节选自CSDN资深博主许向武的最新力作《Python高手修炼之道:数据处理与机器学习实战》。这本书非常适合初学者有针对性地进行编程技能提升,能够满足你从巩固基础、磨练技能再到拓展应用的学习需求,助你“修炼”为熟练的Python程序员。


http://chatgpt.dhexx.cn/article/hpeUPD9Y.shtml

相关文章

线程和进程的区别

1、线程和进程的区别 进程:是指一个内存中运行的应用程序(已经在内存中运行的程序). 一个进程都有一个独立的内存空间,一个电脑(手机)可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位; 线…

线程与进程,你真得理解了吗

线程与进程,你真得理解了吗 1 进程与线程的关系和区别2 并行与并发3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难,那就是进程和线程的区别是什么?这个问题延申开来并不像表面那么简单,今天就来深入一探。 开始…

axure自定义文本框样式

axure中的文本框是我们经常使用的元件,但它本身对样式的设置很有限,不能设置边框样式、阴影等,不能满足我们制作高保真原型的需求,本文给大家介绍一下结合矩形元件自定义文本框样式。(PS:此处的“高保真”指…

html文本框左移动怎么设css,html---文本框样式;

一、一个单行文本框的例子 您的姓名: 您的E_mail: 输入口令: 二、检验用户输入的信息 三、制作一个留言簿 留 言 簿 姓名: E_mail: 留 言 html文本框参考样式 输入框景背景透明: 鼠标划过输入框,输入框…

html 文本域和文本框,html的文本框和文本域样式

如果前边几章学习的比较扎实的话,本节教程就相当容易了。下边先说一下文本框,文本框和文本域都是可以用css进行美化的。比如改变边框精细,颜色,添加背景色、背景图像等。请看下边的实例: .text1 { border:1px solid #f60; color:#03C;} .text2 { border:2px solid #390; w…

[微信小程序专题] 配置文本框样式、排版及点击页面跳转

欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 问题 如何更改小程序页面中的文本框颜色和边框样式? 如何实现多个文本框的排版? 如何实现点击一个文本框即跳转页面? 我们在使用一个小程序…

php输入文本框样式,【js】:检测用户输入、文本框默认样式设置、设计表格样式实现全选反选...

Topic 1 : 检测用户的输入 : 题目要求: 编写一个用户注册页面 检测用户名是否是6位以下,密码是否是8位以上,如果不满足要求高亮显示文本框 ; 代码如下 :用户注册页面 .bg {background-color: red; } //编写…

html语言文本框怎么做,HTML文本框参考样式

在网页设计中,常常要使用html文本框来收集一些用户信息或是制作登录页,虽然只是简单的输入框,但是如果加入一些美化设计会使你的页面看起来更加有吸引力,下面就给大家提供了一些html文本框的参考样式和常见的html操作技巧,希望对你的网页制作有帮助。首先我们先看看一个最…

vue改造textarea多行文本框样式

代码如下&#xff08;有注释&#xff09;,因为这个是h5&#xff0c;如果需要pc端的&#xff0c;自行把rem乘100转换成px <template> <div class"contain"><textarea v-model"textareaSeason"placeholder"请输入具体原因"class&q…

html input文本框样式,css设置input文本框样式代码实例_html/css_WEB-ITnose

css设置input文本框样式代码实例: 使用css设置input元素的样式是最为常用的操作之一&#xff0c;当然也是最为基础的操作&#xff0c;可能对于刚刚接触css的朋友还不够熟悉&#xff0c;下面就通过一段简单的代码历史演示一下如何设置文本框的样式&#xff0c;当然这个演示可能并…

CSS之文本框样式和水平居中

文章目录 1 CSS使用1.1 文本框样式1.1.1 鼠标一上去变成浅绿色1.1.2 文本框提示样式&#xff0c;鼠标点击获得焦点时提示内容消失1.1.3 input文本框样式1.1.4 只有下划线的文本框1.1.5 软件序列号式的输入框1.1.6 输入框景背景透明1.1.7 鼠标划过输入框&#xff0c;输入框背景色…

【Css】input输入文本框的样式大全和搜索框实例(图文和完整源码)

一、默认显示信息 <input type"text" required"required" placeholder" 请输入金额" name"u"onfocus"if(placeholder 请输入金额){placeholder}"onblur"if(placeholder){placeholder 请输入金额}"v-model:v…

文本框输入的样式

文本框文字的输入样式设计&#xff0c;这里分四种样式&#xff1a; 1、从左到右 2、从右到左 3、从中间到两边 4、两端对齐 效果如下&#xff1a; TextAlignAt.css文件&#xff1a; .left {text-align: left;border: 1px dotted black;width: 50%;}.right {text-align: r…

HTML滚动条

由于四象限中可能会有很多任务&#xff0c;可能会超出象限大小&#xff0c;所以需要加上滚动条。 一般是&#xff1a;overflow:auto这个属性; 同时简单介绍几种HTML滚动条代码&#xff1a; 1、向右滚动代码&#xff1a; <div id"colee_right" style"overf…

html中设置滚动条的样式

一、效果图 二、css ::-webkit-srollbar-track-piece{background:none;-webkit-border-radius:0;} ::-webkit-scrollbar{width:8px;height:8px;} ::-webkit-scrollbar-thumb:vertical{height:50px;background-color:#bbbbbb;-webkit-border-radius:4px;outline:0px solid #…

(css)滚动条样式

(css)滚动条样式 效果&#xff1a; /*滚动条整体样式*/ ::-webkit-scrollbar {width: 2px;/*高宽分别对应横竖滚动条的尺寸*/height: 10px; } ::-webkit-scrollbar-thumb {/*滚动条里面小方块*/border-radius: 10px;width: 2px;height: 60px;background: linear-gradient(0deg,…

vue修改滚动条样式的方法

这篇文章主要介绍了vue修改滚动条样式,首先要知道&#xff0c;修改滚动条样式&#xff0c;利用伪元素-webkit-scrollbar。下面来看看文章内容的具体实现吧 目录 首先要知道&#xff0c;修改滚动条样式&#xff0c;利用伪元素-webkit-scrollbar。 注意&#xff0c; ::-webkit-…

CSS自定义滚动条样式

CSS自定义滚动条样式 测试html内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

CSS 滚动条: 自定义滚动条样式

CSS 滚动条: 自定义滚动条样式 文章目录 CSS 滚动条: 自定义滚动条样式前言正文overflow & ::-webkit-scrollbar实际效果&#xff08;自定义滚动条、隐藏滚动条&#xff09; 结语其他资源参考连接完整代码示例 前言 本篇来介绍如何为自己的网页定制化自己的滚动条 正文 …

css如何修改滚动条样式

默认滚动条样式如下: 那如何修改呢?如下代码: <div class="inner"> <div class="innerbox"> <p style="height:200px;">这是内容111</p> <p style="height:400px;">这里是…