• 僵尸进程与孤儿进程/守护进程/互斥锁


    一:昨日复习:

    1.相关概念

    并发:多个任务看起来是同时运行的,但是其实是来回的切换

    并行:多个任务是真正意义上的同时运行,多核

    串行:一个任务运行完成后才能开启下一个任务

    2.操作系统的发展历史

    批处理操作系统---》分时操作系统--》multics--》unix--》minix--》linux

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    今日内容:

    一:僵尸进程与孤儿进程 *******

    1.定义

    (1)僵尸进程:基于父子进程相互独立运行,存在机制是为了保证父进程随时可以看到操作系统保留的子进程的状态和痕迹(pid)

            是linux操作系统中一种特殊的数据结构,在Linux系统中所有的子进程在死后都会进入僵尸进程的状态,是指将该进程的重型资源放掉(CPU,内存,打开的文件),但是会保留该进程的状态信息,比如pid

            处理父进程一直开启造成僵尸进程:kill-CHLD父进程考虑回收僵尸进程儿子,验证是否有设计;第二种杀掉父进程

    (2)孤儿进程:父进程死掉,就成为孤儿进程,不会被爷爷进程接管,被pid为1的进程接管,它有回收僵尸进程回收机制

    二:守护进程***

    像守护皇帝的太监,皇帝运行完代码,它也死亡

    from multiprocessing import Process
    import time
    
    def foo():
        print(123)
        time.sleep(1)
        print('end123')
    
    def bar():
        print(456)
        time.sleep(3)
        print('end456')
    
    if __name__ == '__main__':
        p1=Process(target=foo)
        p2=Process(target=bar)
        
        p1.daemon=True
        p1.start()
    
        p2.start()
        print('主进程')
    第一种结果:

    主进程
    456
    end456

    第二种结果:

    主进程

    123
    456
    end456

    三:互斥锁***

    合租房子中的公厕,一个人用完,另外一个人才可以用;互斥锁就是在一个进程运行时,进行锁着其他不得使用,直至用完

    from multiprocessing import Process,Lock
    import json
    import os
    import time
    
    def check():
        with open('db.json',mode='rt',encoding='utf-8') as f:
            time.sleep(1)
            dic = json.load(f)
            print("%s查看到剩余票数为:%s" %(os.getpid(),dic['count']))
    
    def get():
        with open('db.json',mode='rt',encoding='utf-8') as f:
            time.sleep(1)
            dic = json.load(f)
    
        if dic['count'] > 0:
            dic['count'] -= 1
            time.sleep(3)
            with open('db.json',mode='wt',encoding='utf-8') as f:
                json.dump(dic,f)
                print('%s购票成功' %os.getpid())
        else:
            print("购票失败")
    def func(mutex):
        check()
    
        mutex.acquire()
        get()
        mutex.release()
    
        # with mutex:
        #     get()
    
    if __name__ == '__main__':
        mutex = Lock()
    
        for i in range(10):
            p = Process(target=func,args=(mutex,))
            p.start()
            # p.join()
    
        print("")

    四:ipc,管道,队列 ***

    共享内存,队列就是管道+互斥锁实现的,建议用队列

    五:信号量***

    大家共用公共厕所,但是数量还是有限,也是一种锁

  • 相关阅读:
    TURN协议(RFC5766详解)
    css布局相关:涉及到常见页面样式难点
    关于echart的x轴固定为0-24小时显示一天内的数据
    用于实现tab页签切换页面的angular路由复用策略
    Promise相关学习
    js原型链、继承、this指向等老生常谈却依然不熟的知识点——记录解析
    js中有遍历作用相关的方法详解总结
    rgb格式颜色与#000000格式颜色的转换
    input搜索框的搜索功能
    Fastapi学习总结(上)
  • 原文地址:https://www.cnblogs.com/dayday-up-a/p/14302221.html
Copyright © 2020-2023  润新知