• python全栈开发day31-操作系统介绍,异步、同步、阻塞、非阻塞,进程


    一、网络编程内容回顾

        1.arp协议

            #交换机

            #广播、单播

        2.ip协议

        3.tcp和udp协议

            tcp:可靠的,面向连接的,字节流传输,长连接

                三次握手:一方发送请求,另一方确认请求同时发送请求,两条消息合并了。

                    1.SYN=1,seq=i

                    2.ACK=i+1,SYN=1,seq=j

                    4.ACK=j+1

                    状态:SYN_SEND,SYN_RCVD,ESTABLISHED,ESTABLISHED

                数据传输:write() 5.seq = i+1,ACK= j+1

                     read() 6.ack=i+2

                四次挥手:7 FIN seq=i+2, ACK=j+1

                                                         8.ACK=i+3

                     9.FIN seq=j+1

                      10.ACK=j+2

                

                         udp:不可靠的,面向无连接,数据包传输

        4.socket

            tcp网络编程和udp网络编程

        5.socketserver 

            基于TCP协议实现的并发的socketserver工具

           

    二、今日内容总结

      1.操作系统介绍

        (1) 发展路径

        手工操作 -- 穿孔卡带

        批处理 -- 磁带存储

            联机批处理系统

            脱机批处理系统

        多道程序系统

        实时系统

        通用系统。。。。

            个人计算操作系统

            网络操作系统

            分布式操作系统

        (2) 操作系统的作用

          1.隐藏了丑陋的硬件调用接口

            隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的        细节,专心开发自己的应用程序即可。 例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制          (比如控制磁盘转动,移动磁头读写数据等细节)

          2. 使应用程序的对硬件资源的竞态请求变的有序化

                例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么a程序竞争到了打印机资源就打印,然后可能          是b竞争到打印机资源,也可能是c,这就导致了无序,打印机可能打印一段a的内容然后又去打印c...,操作系统的一个功能就是将这种无序变得有序。           

      2.同步、异步、阻塞、非阻塞

         总结:

            1)阻塞、非阻塞:进程/线程访问的数据是否就绪,是否需要进程/线程去等待,等待则是阻塞,不等待干别的事就是非阻塞。

            2)同步、异步:同步就是需要自己去查询或读取数据,异步就是不需要自己去查询或读取数据由操作系统完成。

      3.进程

        1)进程的概念
          程序:指令和数据的有序集合

          进程:程序在处理机上的一次执行过程

               进程是计算机中资源分配的最小单位。

                             第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储          处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

             第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。[3] 进程          是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序          设计操作系统都建立在进程的基础上。

        2)进程的并行和并发

            并行:两者同时执行

            并发:在一定资源情况下,两者交替轮流使用资源。

        3)进程的三状态

           就绪,阻塞,运行

           

           

        4)进程的创建和结束

           (1)、创建

              系统初始化

              在运行的进程中开启一个子进程

              与用户交互时,开启一个进程

              一个批处理作业初始化

           (2)、结束

              正常退出

              出错退出

              严重错误

              被其他进程kill

      4.进程模块multiprocess

        1)进程的创建

           1 开启一个子进程的两个方法:

           方法一:

            

    from multiprocessing import Process
    import os
    
    def func(name):
        print('我的进程id:%s,我父进程id: %s' %(os.getpid(),os.getppid()))
        print('hello, I AM %s' % name)
    
    
    # 为什么要加这个main判断的原因,是因为win下,创建子进程时,会将父进程的数据等通过
    # import方法导入子进程空间,如果不加main判断就会陷入一直递归导入的情况。
    # 而linux和mac系统不存在此问题,因为它们是将数据通过copy方式导入子进程空间的。
    if __name__ == '__main__':
        print('我的进程id:%s,我父进程id: %s' % (os.getpid(), os.getppid()))
        p = Process(target=func, args=('wahaha', ))
        p.start()   # 启动一个子进程任务func
    传入函数的方法

                           方法二:

    class MyProcess(Process):
    
        def __init__(self, num):
            super().__init__()
            self.num = num
    
        def run(self):
            # print('%s,我的进程id:%s,我父进程id: %s' % (self.name,os.getpid(), os.getppid()))
            print(self.num)
            time.sleep(random.random())
            print('*'*self.num)
    
    
    if __name__ == '__main__':
        p_lst = []
        for i in range(10):
            p = MyProcess(i)
            p.start()
            p_lst.append(p)
        for p1 in p_lst:
            p1.join()
        print('结束')
    View Code

                      2 .进程的特点:

             父进程必须等待子进程结束后回收子进程的资源

             进程之间是数据隔离的,包括父子进程

             异步的特点--并发

         3.子进程传参数

          实例化Process类方式:args=(,)

          定义类继承Process类方式:通过类中__init__方法

         4.子进程返回值:不能直接获取到子进程中函数的返回值

            5. p.join方法,会一直阻塞进程结束,才会执行父进程下边的程序代码。

            6.守护进程

          #守护进程:主进程的<代码>执行完毕后,守护进程随之结束。而不管主进程开启的子进程是否执行完毕。

          

        2)进程同步控制

        3)进程间通信

        4)进程间的数据共享

        5)进程池

       

  • 相关阅读:
    02-qiankun-gitsubmodule使用及部署流程
    01-eslint/vetur/preitter/vscode配置
    01-mac m1 安装nvm / node-sass报错
    17-JS数组方法,是否改变原数组归纳
    03-webpack之require.context()实现前端工程自动化
    最小生成树prim算法
    bfs
    数据结构实验三题目一
    邻接表
    邻接矩阵
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9167958.html
Copyright © 2020-2023  润新知