0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

守护进程到底有什么用?

冬至配饺子 来源:多兰多 作者:Toranto 2022-08-19 10:08 次阅读

join控制子进程

我们通过例子来:

poYBAGL-7jqACAdvAACSUvGyuN4936.png
poYBAGL-7j-AFqEUAAEPKrHyKwE569.png

最后的10封邮件发送完毕我是想等所有子进程运行完毕再打印,但是从运行结果来看,这并没有达到我们的预期,因为父进程和子进程是异步的。

聪明的小明问了:那我在最后的print语句之前让程序休眠不就好了?

poYBAGL-7lOANaMbAAB3MyErDTs657.png

非常聪明,但是治标不治本,这样做只是让程序陷入了休眠状态,但是并没有从根本上解决异步的问题,它们还是异步,只是异步到了休眠。

这时我们可以用上join()方法:

pYYBAGL-7maAJ8JyAAB3D8lTdOY030.png

得到的运行结果:

pYYBAGL-7nuAJtA5AADxWryPyE0749.png

原理:

join()方法表示为给进程添加阻塞,也就是进程运行到这里就会停滞。再没有用上join方法之前,for循环会同时创建这10个进程,但是用上了join方法之后,必须依次执行循环,因为第一次创建进程到了join()就会阻塞,直到第一次进程完成,join方法才会释放阻塞,开始第二次循环,如此往复执行十次。

但是:

从根本上上来讲,join方法帮我们把异步变成了同步,虽然可以更加有序,但是并没有给我增加效率,异步的同时执行还是我们需要的,因为可以节省时间。而join方法将异步编程同步之后,反而拖累了工作效率。

当然,也有解决的办法:

poYBAGL-7pyASMGfAAC2TL61T2E558.png
pYYBAGL-7qGAP9oqAAEXRneXcV4775.png

将进程全部添加到一个列表中,进程启动的时候仍然是异步,只有结束时所有的阻塞都解除了,主程序才能执行。

守护进程

守护进程(daemon)是一类在后台运行的特殊进程,是一个在后台运行并且不受任何终端控制的进程。用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。守护进程最重要的特性是后台运行

poYBAGL-7sCAQJmbAAB8nocK6b4168.png
pYYBAGL-7saAIjCsAAB2y0osqM4488.png

换言之,守护进程会随着主进程代码的执行完毕而结束。

我们再看一段:

poYBAGL-7uKAYlqvAACzNh-gHk4389.png
pYYBAGL-7umAGiYeAACPjnkcbxc995.png

效果也是一样的,只是多了一个func2,这里只有func1是守护进程。所以守护进程在主进程代码执行完毕时就结束了,而func2不是守护进程,所以可以继续运行。

可能有小明会很疑惑,守护进程到底有什么用?

守护进程其实可以作为程序的报活,每隔一段时间向一台机器汇报自己的状态,死了就不汇报了。(先这样理解吧)

进程锁-LOCK

Lock锁,什么叫Lock锁,我们还是通过一个直观的例子来。

我们建一个json文件,来模拟抢票,是的,就是抢票:

建一个json文件

{'count':2} #表示余量为2

实现抢票

poYBAGL-7x2AWDAmAAChacQX_Yg769.pngpYYBAGL-7yKAORfTAACxyenhuUM559.pngpYYBAGL-7yaADjddAADJBLICmRU756.pngpYYBAGL-7yuAVdvUAACmPWvXJBg651.png

明明只有两张票,却都抢到了。。。。

pYYBAGL-7z6AD-bXAABbhiU0diM826.png

但我们仔细看,其实json文件中只修改了一次数据。因为这是一个异步程序,五个用户同时打开并且读取了json文件的内容,也就是说数据的修改是在外部的,而不是在json文件内,只要同时打开并读取,那么一开始五个用户读取到的内容都是一样的{'count':2},五个用户又都在外面对数据进行修改,修改完了再保存回去,也就是五个人保存的数据都是{'count':1},发生了覆盖现象,当涉及数据的修改时,异步其实很不安全。

所以我们可以采用加锁(互斥锁,这里是进程的互斥锁,线程也有锁)的方法。互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。原理为:


pYYBAGL-71eAbbKOAACO06DpzQA276.png

没有上锁的时候,用户可以一起涌入数据文件,对数据文件内的信息进行修改。但是当上锁之后,访问数据文件就只有一个通道了,虽然大家都是同时发起访问的,但是进入数据文件的的用户只能有一个,然后等这个用户修改完了退出文件之后,通道才会开放给其他用户。程序还是异步的,只是在数据修改环节限制了流量。

poYBAGL-736AEsklAAD_bIXGE0U441.pngpYYBAGL-74SAHRUjAAAs_GeNkL8216.pngpoYBAGL-74qAEnGvAAC5qxgLLF8877.png

这就使得异步的程序达到了同步的效果。

信号量-Semaphore

互斥锁(Lock)同时只允许一个进程修改数据,而信号量(Semaphore)则允许多个人同时修改数据。互斥锁就相当于你家的卫生间,只有一个坑位,同时只能一个人上厕所;而信号量则相当于公共厕所,有多个坑位,可以多个人同时上厕所。比如现在有10个人需要上厕所,现在公共厕所只有3个坑位,这时候就先有3个人上厕所,等其中一个或者多个人出来之后,另外的人才能进去。

Semaphore管理一个内置的计数器,每当调用acquire()时内置计数器-1;调用release() 时内置计数器+1;计数器不能小于0;当计数器为0时,acquire()将阻塞进程直到其他进程调用release()


poYBAGL-77aARlwSAABymSLloag994.pngpYYBAGL-77qAUELwAACtpsdS0Hk471.pngpYYBAGL-78CAUXYgAAD2Aan4Mi0609.png

事件-Event

再来一个红灯停绿灯行:

poYBAGL-7_eAFEPqAAD97EFQVsg772.png
poYBAGL-7_yAbrpPAACcz1F9dsU895.png
poYBAGL-8A2AQQsGAAHLEY-82uw748.png




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94302
  • Lock
    +关注

    关注

    0

    文章

    10

    浏览量

    7757
  • 进程
    +关注

    关注

    0

    文章

    201

    浏览量

    13941
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8308
收藏 人收藏

    评论

    相关推荐

    进程监视器什么用,怎么调用

    进程监视器什么用,怎么调用
    发表于 03-13 16:10

    Linux守护进程

    在系统引导载入时启动,在系统关闭时终止。Linux很多系统服务,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如
    发表于 08-22 09:17

    反码位是什么?到底有什么用

    反码位是什么?到底有什么用
    发表于 05-07 07:16

    64-Kbit FRAM是什么?64-Kbit FRAM到底有什么用途?

    64-Kbit FRAM是什么?为什么要开发一种64-Kbit FRAM?64-Kbit FRAM到底有什么用途?
    发表于 06-17 08:27

    笔记本固态硬盘到底有什么用

    如果现在您去购买电脑会发现很多笔记本是会带有固态硬盘的,及时很多人购买的时候需要性能高的也会给主机加上固态硬盘,为什么很多人喜欢加上固态硬盘呢?笔记本固态硬盘到底有什么用呢?我们一起来了解一下。首先
    发表于 09-08 07:22

    模拟看门狗到底有什么用处呢

    到底什么是模拟看门狗呢?模拟看门狗到底有什么用处呢?
    发表于 01-17 07:33

    异常处理向量表的设置中DCD这些伪指令到底有什么用

    在异常处理向量表的设置中,为什么不直接将异常向量的入口地址写入 PC 中呢,为什么非要用什么 DCD 这些伪指令,到底有什么用
    发表于 02-28 14:53

    ARM和DSP到底有什么区别?

    现在在学ARM,想知道ARM和DSP到底有什么区别?为什么有些地方DSP有些ARM
    发表于 10-19 07:20

    Linux守护进程详解

    较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。Linux很多系统服务,大多数服务都是通过
    发表于 10-18 14:24 0次下载
    Linux<b class='flag-5'>守护</b><b class='flag-5'>进程</b>详解

    数据可视化到底有什么用

    数据可视化到底有什么用呢?数据可视化是当下火热的大数据应用技术,很多新锐地大数据分析工具都注重开发数据可视化的功能模块。数据可视化及其技术研究和应用开发,已经从根本上改变了我们对数据和数据分析工具的理解,数据可视化对大数据发展的影响广泛而深入。
    的头像 发表于 02-05 14:03 2.6w次阅读

    工业互联网, 你到底有

    工业互联网,你到底有
    的头像 发表于 03-01 12:32 3353次阅读
    工业互联网, 你<b class='flag-5'>到底有</b>啥<b class='flag-5'>用</b>?

    NFC是什么NFC到底有什么用

    如今,手机变得越来越强大,功能也是越来越丰富,近两年出来一个新的功能很有趣,叫NFC。很多人不知道这个NFC是什么,什么用
    的头像 发表于 02-04 15:16 14.6w次阅读

    log2在verilog中到底有什么用

    编译成电路,所以有这种想法情理之中,毕竟花大把时间去玩一个函数发现他局限性很大那确实收益太少。 那么他到底有什么用? 如果大家要设计一个深度1024的fifo,那么地址位宽取多大合适?*╭︎( ˙º˙)╯︎* 当然是10位,log2(1024) 所以可以如下
    的头像 发表于 10-08 11:23 4474次阅读
    log2在verilog中<b class='flag-5'>到底有</b><b class='flag-5'>什么用</b>

    npu是什么意思?npu芯片是什么意思?npu到底有什么用

    npu是什么意思?npu芯片是什么意思?npu到底有什么用?  NPU的概念 NPU(Neural Processing Unit,神经网络处理器)是一种专门用于处理人工神经网络计算的计算机微处理器
    的头像 发表于 08-27 17:03 4.1w次阅读

    IPv6到底有什么用,给我们生活带来哪些变化?

    IPv6是下一代互联网协议,与IPv4相比,具有更多的地址空间和更好的性能。随着互联网的普及和发展,IPv6的用途也越来越广泛,已经在生活中发挥了重要作用。那IPv6到底有什么用,给我们生活带来
    的头像 发表于 03-29 14:00 1175次阅读
    IPv6<b class='flag-5'>到底有</b><b class='flag-5'>什么用</b>,给我们生活带来哪些变化?