并发编程:

  • 程序:

    • 程序就是一堆文件
  • 进程:

    • 进程就是一个正在执行的文件/程序
  • 进程被谁运行:

    • CPU最终运行你的程序
      • 操作系统调度作用,将你磁盘上的程序加载到内存,然后交给CPU处理,一个CPU在运行的一个程序,就是开启了一个进程
  • 操作系统:

    • 操作系统定义:
      • 操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互
    • 操作系统的作用:
      • 如果没有操作系统,去写一个程序,你要完成两层功能:

        • 第一层:你要学会底层硬件:CPU,内存,磁盘是如何工作使用的
        • 第二层:去调度这些底层的硬件
      • 操作系统两个作用:

        • 1,将一些复杂的硬件操作封装成简单的接口,便于使用

        • 2,操作系统可以合理的调度分配多个进程与CPU的关系,让其有序化

    • 操作系统(计算机)的发展史:
      • 第一代电子计算机:操作插线与你的程序结合

      • 第二代计算机:磁带存储,批处理系

      • 第三代计算机:集成电路,多道程序系统

      • 知识点解析:

        • 多道技术解决的问题:
          • 时间复用:利用闲置时间,进行复用
          • 空间复用:提高内存的利用率,一个内存可以加载多个进程
        • 数据隔离:
          • 解决软件之间的隔离,互不影响

进程:

  • 一个程序可以开启多个进程

  • 概念:
    • 串行:所有的进程有CPU一个一个解决

    • 并发:单个CPU,同时执行多个进程(来回切换),看起来像是同时运行

    • 并行:多个CPU,真正的同时运行多个进程

    • 阻塞:遇到IO(recv,input)才会阻塞

      • 一个cpu运行两个进程,其中一个进程完全没有阻塞
    • 非阻塞:没有IO

  • 进程的创建:
    • 什么是开启多个进程:socket:server,client两个进程
    • python中,如果一次想开启多个进程,必须是一个主进程,开启多个子进程
    • linux,windows:有主进程开启子进程
    • 相同点:主进程开启子进程,两个进程都有相互隔离的独立空间,互不影响
    • 不同点:
      • linux:子进程空间的初始数据完全是从主(父)进程copy一份
      • windows:子进程空间初始数据完全是从主(父)进程copy一份,但是有所不同

创建进程的两种方法:

  • 函数-创建进程:

  • from multiprocessing import Process
    import time
    #当前py文件就是主进程,先运行主进程
    def task(name):
        print(f"{name}is running")
        time.sleep(3)  #阻塞
        print(f"{name}is done")
    
    if __name__ == '__main__':                  #windows开启必须写在mian下面
         p = Process(target=task,args=("海洋",)) #target要封装的内容,对象args一定是个元祖形式
         p.start()      #子进程 通知操作系统在内存中开辟一个空间,将p这个进程放进去,让cpu执行
         print("___主进程")
  • 类-创建进程(了解):

  • from multiprocessing import Process
    import time
    class MyProcess(Process):
    
        def __init__(self,name):
            super().__init__()      #放在最上面,必须要继承父类init
            self.name = name
    
        def run(self):
            print(f"{self.name}is running")
            time.sleep(3)  #阻塞
            print(f"{self.name}is done")
    
    if __name__ == '__main__':
        p = MyProcess("海洋")
        p.start()
        print("====主进程")

版权声明:本文为haiyang11原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/haiyang11/p/11214538.html