zoukankan      html  css  js  c++  java
  • 2019.9.11学习内容及随堂笔记

    小结

    将应用程序对硬件资源的竞态请求变得有序化

    串行:一个程序‘完完整整’的执行完了再执行下一个程序

    并发:看起来是同时运行的,实际上不是 (切换+保存状态)

    并行:真正做到了同时运行

    多道技术:(了解)
    -空间复用:共用一个内存条,每一个进程都有自己独立的内存空间,互不干扰,物理级别的隔离
    -时间复用:共用一个CPU
    cpu切换(掌握) :当进程遇 io 的时候或者占用时间过长,cpu会切换到下一个进程

    现代计算机:

    -现在的计算机一般书多核,那么每一个核都会利用多道技术

    -有4个cpu,运行于CPU1的某个程序遇到 io 阻塞,会等到 io 结束再重新调度,会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定

    并发:切换+保存状态

    坑 (如果没加 if _ _ name _ _ == '_ _main _ _', 会陷入递归)

    开启子进程:把父进程的代码完整复制到一个新的内存空间里去执行
    x =1
    def task()
    print(x)

    createProcess(task)

    开启子进程的方式一

    #1. 导入模块  Process是一个类
    from multiprocessing import Process
    import time
    
    def task():
        print('进程 start')
        time.sleep(2)
        print('进程 end')
    
    if __name__ == '__main__':
        p=Process(target=task)
        p.start()
        time.sleep(5)
        print('主进程')
    

    开启子进程方式一——多个子进程

    #1. 导入模块  Process是一个类
    from multiprocessing import Process
    import time
    
    def task(x):
        print(f'子进程{x} start')
        time.sleep(2)
        print(f'子进程{x} end')
    
    if __name__ == '__main__':
        p=Process(target=task, args=('Nick',))
        p2=Process(target=task, args=('tank',))
        p.start()
        p2.start()
        time.sleep(5)
        print('主进程')
    

    进程的执行顺序进度有操作系统控制(不是固定的)

    开启子进程方式二

    # 导入模块
    from multiprocessing import Process
    import time
    
    # class Test(Process):
    #     #用类开启必须要继承Process这个类
    #     def run(self):
    #         print('子进程 start')
    #         time.sleep(2)
    #         print('子进程 end')
    #
    # if __name__ == '__main__':
    #     p=Test()
    #     p.start()
    #     time.sleep(5)
    #     print('主进程')
    
    class Test(Process):
        def __init__(self,name):
            super().__init__() #如果不写这一句就是在重写父类中的__init__,运行程序会报错
            self.name=name
    
        def run(self):
            print(f'子进程{self.name} start')
            time.sleep(2)
            print('子进程{self.end} end')
    # p=Test('Nick')
    # print(p.name) #Nick
    
    if __name__ == '__main__':
        p=Test('Nick')
        p.start()
        print('主进程')
    
    

    验证进程的内存空间隔离

    from multiprocessing import Process
    import time
    
    x = 0
    def task():
        global x #把x变成全局变量
        x = 100
        print('子进程的x修改为{}'.format(x))
    
    if __name__ == '__main__':
        p = Process(target=task)
        p.start()
        time.sleep(3)
        print('主进程')
    

    测试

    from multiprocessing import Process
    import time
    
    def task():
        print('子进程 start')
        time.sleep(2)
        print('子进程 end')
    
    if __name__ == '__main__':
        p = Process(target=task)
        p1 = Process(target=task)
    
        p.start()
        p1.start()
        time.sleep(5)
        print('主进程')
    
    '''主进程在等待所有的子进程结束
    每一个进程都有一个pid,子进程结束后主进程可以立即对其进行回收,也可以等所有的子进程都结束后,主进程结束之前统一回收'''
    
    
    
  • 相关阅读:
    为什么switch里的case没有break不行
    CLS的探索:Python如何让日志免费云化
    做一次“黑客“,入侵一次自己的服务器
    斥资288买了三年服务器之后应该如何配置
    Scrapy入门到放弃01:开启爬虫2.0时代
    c#自制抽奖小程序
    c#中的几种Dialog
    解决数据库排序空值排在前问题
    Oracle 数据库添加定时事件
    FileReader 对象实现图片预览
  • 原文地址:https://www.cnblogs.com/chmily/p/11508194.html
Copyright © 2011-2022 走看看