线程间通信和进程间通信_有些进程只包含一个线程对吗

线程和进程有什么区别?可以说是程序员必须准备的一道高频面试题

相信不少程序员在面试算法或开发岗位时都遇到过这个问题。尽管这个问题似乎每个接触过计算机操作系统的人都应该懂,但是如何能回答好这个问题却十分考验程序员的水平。

为了能够给出一个全面而深入的答案,首先我们要理解线程的概念,以及为什么需要线程编程。

什么是线程呢?

网上一般是这样定义的:线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

这么说,你听懂了吗?我觉得这样的定义纯粹是自说自话:新手看完了一脸懵,老鸟看完了不以为然。我们还是用“非专业”的外行话来解释一下吧。

线程间通信和进程间通信_有些进程只包含一个线程对吗

假设你经营着一家物业管理公司。最初,业务量很小,事事都需要你亲力亲为。给老张家修完暖气管道,立马再去老李家换电灯泡——这叫单线程,所有的工作都得顺序执行

后来业务拓展了,你雇佣了几个工人,这样,你的物业公司就可以同时为多户人家提供服务了——这叫多线程,你是主线程。

线程间通信和进程间通信_有些进程只包含一个线程对吗

工人们使用的工具,是物业管理公司提供的,这些工具由大家共享,并不专属于某一个人——这叫多线程资源共享

工人们在工作中都需要管钳,可是管钳只有一把——这叫冲突。解决冲突的办法有很多,比如排队等候、等同事用完后的微信通知等——这叫线程同步

你给工人布置任务——这叫创建线程。之后你还得要告诉他,可以开始了,不然他会一直停在那儿不动——这叫启动线程(start)

如果某个工人(线程)的工作非常重要,你(主线程)也许会亲自监工一段时间,如果不指定时间,则表示你会一直监工到该项工作完成——这叫线程参与(join)

业务不忙的时候,你就在办公室喝喝茶。下班时间一到,你群发微信,所有的工人不管手头的工作是否完成,都立马撂下工具,跟你走人。因此如果有必要,你得避免不要在工人正忙着的时候发下班的通知——这叫线程守护属性设置和管理(daemon)。

线程间通信和进程间通信_有些进程只包含一个线程对吗

再后来,你的公司规模扩大了,同时为很多生活社区服务,你在每个生活社区设置了分公司,分公司由分公司经理管理,运营机制和你的总公司几乎一模一样——这叫多进程,总公司叫主进程,分公司叫子进程。

总公司和分公司,以及各个分公司之间,工具都是独立的,不能借用、混用——这叫进程间不能共享资源。各个分公司之间可以通过专线电话联系——这叫管道。各个分公司之间还可以通过公司公告栏交换信息——这叫进程间共享内存。另外,各个分公司之间还有各种协同手段,以便完成更大规模的作业——这叫进程间同步。分公司可以跟着总公司一起下班,也可以把当天的工作全部做完之后再下班——这叫守护进程设置

进程有什么用?

进程可以说是一个“执行中的程序”。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

有了线程技术,我们就可以在一个进程中创建多个线程,让它们在“同一时刻”分别去做不同的工作了。这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。

线程间通信和进程间通信_有些进程只包含一个线程对吗

不过,多线程技术不是万金油,它有一个致命的缺点:在一个进程内,不管你创建了多少线程,它们总是被限定在一颗CPU内,或者多核CPU的一个核内。这意味着,多线程在宏观上是并行的,在微观上则是分时切换串行的,多线程编程无法充分发挥多核计算资源的优势。这也是使用多线程做任务并行处理时,线程数量超过一定数值后,线程越多速度反倒越慢的原因。

线程间通信和进程间通信_有些进程只包含一个线程对吗

多进程技术正好弥补了多线程编程的不足,我们可以在每一颗CPU上,或者多核CPU的每一个核上启动一个进程,如果有必要,还可以在每个进程内再创建适量的线程,最大限度地使用计算资源解决问题。因为不在同一块内存区域内,和线程相比,进程间的资源共享、通信、同步等,都要麻烦得多,受到的限制也更多。

本文节选自CSDN资深博主许向武的最新力作《Python高手修炼之道:数据处理与机器学习实战》。这本书非常适合初学者有针对性地进行编程技能提升,能够满足你从巩固基础、磨练技能再到拓展应用的学习需求,助你“修炼”为熟练的Python程序员。

线程间通信和进程间通信_有些进程只包含一个线程对吗

线程间通信和进程间通信_有些进程只包含一个线程对吗

想成为高手当然就需要有高手引路。基于十多年的Python数据处理经验,许向武总结了新手初学Python中的常见盲点和误区,着重对其进行了梳理和讲解,力求让你少走弯路,直接站在高手的肩膀上看Python。

线程间通信和进程间通信_有些进程只包含一个线程对吗

随着Python语言的热度上升,如今学习Python的资源、书籍名目纷杂,让学习者难以甄别和选择。不如就从这本Python专家撰写的“修炼指南”开始,从此告别“从入门到放弃”,走上高手进阶之路。

线程间通信和进程间通信_有些进程只包含一个线程对吗

本文【线程间通信和进程间通信_有些进程只包含一个线程对吗】由作者: 悲观锁 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4203.html

(0)
上一篇 2023-03-10 08:48:51
下一篇 2023-03-10 08:53:01

相关推荐

  • 防止sql注入是什么意思,什么是sql注入攻击

    什么是 SQL 注入? SQLi 是一种基于 Web 的应用程序攻击,攻击者可以在网站的数据库中运行恶意查询。SQL是一种用于执行恶意SQL语句的代码注入技术。 例如,如果你想登录网站,但忘记了用户名和密码,通过使用SQLi注入,我们可以在不知道密码的情况下登录或访问网页。 SQL 注入是如何工作的? SQL 注入包含通过应用程序中来自客户端的输入数据插入或…

    2023-03-22
    100
  • c语言编译器如何改成中文版_c语言编译器怎么改中文版

    一、 目前编译器的三种主流形式 做开发的,不论是阅读代码、编写程序总会涉及到编译器问题,我也经历过了TC、VC6、VC2010、CodeBlocks等等,使用过很多软件,最后慢慢的形成了自己的一套系统,希望对你也有帮助。 常见的C编译器主要的方式有以下三种: 1、基于文本编辑器改造的编译器 专业文本编辑器: (1)Visual Studio Code Vis…

    2023-03-10
    400
  • 手机打字输入法,手机打字快用什么输入法最好

    现在我们的生活、工作都离不开手机,所以手机输入法好不好用非常重要。尽管很多手机都自带输入法,但是大多数用户还是偏向于在应用市场选择自己喜欢的输入法。目前应用市场上比较热门的输入法有,搜狗输入法、百度输入法、讯飞输入法、QQ输入法、章鱼输入法,今天我们来看看它们到底哪些更好用。 1/ 恰饭方式 输入法的恰饭方式主要为出售皮肤、字体、壁纸、会员等。其中搜狗输入法…

    2023-03-19
    000
  • linux版本有哪些有什么区别(linux各个版本比较)

    我们点评了为程序员和开发人员提供的十大最佳 Linux 发行版(2022 版),以帮助他们完成工作和个人项目。 程序员和开发人员在其工作或项目中会使用各种工具和应用程序,包括代码编辑器、编程语言编译器、附加组件、数据库等。如果你对现代开发者的工作流程进行分类,它包含以下典型的工作流程: 访问代码库 编程 调试 测试 部署 而这种典型的工作流程可能需要各种工具…

    2023-03-15
    300
  • vb程序设计教程课后答案(vb程序设计第五版课后题答案)

    VisualBasic程序设计试题 国开-下放-7069VisualBasic程序设计 1、随机文件是因为() 2、顺序文件是因为() 3、文件号最大可取值为() 4、Print#1,STR$1中的Print是() 5、以下的属性和方法中()可重定义坐标系。 6、VB6.0是一种面向()的编程环境。 7、要使Forml窗体的标题栏显示"欢迎使用VB…

    2023-03-17
    300
  • 内存检测软件显示信息

    我们常常会使用系统自带的内存诊断工具和memtest这个工具来检测内存是否存在错误。但是我们很多玩家可能都不知道QuickMemoryTestOK这个更为强大的内存检测工具。 今天我们一起来看看QuickMemoryTestOK。 1/显示内存信息 QuickMemoryTestOK的功能非常丰富,可以检测内存信息,我们可以看到内存运行的频率。但是因为Qui…

    2023-03-13
    400
  • 操作系统原理课后答案,计算机系统结构第二版课后答案

    广开-形考-10111计算机组成原理 1、只有定点数运算才可能溢出,浮点数运算不会产生溢出 2、ASCII编码是一种汉字字符编码 3、一般采用补码运算的二进制减法器,来实现定点二进制数加减法的运算 4、在浮点数表示法中,阶码的位数越多,能表达的数值精度越高 5、机械硬盘的磁头组件主要由磁头、传动臂、主轴电机三部分组成 6、固态硬盘由主控芯片,闪存芯片和缓存芯…

    2023-03-21
    000
  • 负载均衡器的作用是_负载均衡设备的主要功能

    Linux virtual server,是一个基于集群技术和Linux操作系统,目的是实现一个高性能、高可用的服务器,主要工作在网络层。 他采取IP负载均衡,也叫三层负载均衡(因为工作在OSI模型的第三层–网络层),简单来讲就是通过修改请求的目标的IP地址来进行分配任务,将收录进来的信息分配到真正的server上去进行技术实现。当然这不是唯一的…

    2023-03-12
    400
  • 开始菜单左边窗格中的内容 开始菜单有哪些

    在Windows 11 上,最显着的视觉变化之一是重新设计的开始菜单。新菜单类似于之前在Windows 10X上的设计,它放弃了动态磁贴并采用更传统的应用程序启动器方法,具有经典图标和带有圆角的最小设计,以提供更一致、简单和有用的体验。 菜单包括固定的应用程序、最近的文件和应用程序推荐、顶部方便的搜索框以查找任何内容,以及快速关闭或重新启动设备的功能。与我们…

    2023-03-14
    200
  • word文字如何加脚注 文字后添加脚注

    hello大家好,这里是想要去摘遥不可及的星的小鱼,一个本科在读的工科生。 今天是Word的第十三章,插入脚注、尾注和题注。 让我们开始吧! 1.插入脚注 在需要插入脚注的地方单击选中,光标闪烁后,单击“引用”——“插入脚注”,即可插入 插入后原文效果和页尾效果 2.插入尾注 单击“引用”——“插入尾注”,尾注和脚注的主要区别就在于位置 尾注的意思是整篇文章…

    2023-03-21
    000

发表回复

登录后才能评论
返回顶部
错说博客上线啦!