• Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现


    Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现

    一丶进程基础知识

    什么是程序:

    ​   程序就是一堆文件

    什么是进程:

    ​   进程就是一个正在执行的文件/程序,是对各种资源管理的集合,

    ​   进程不具有执行的能力

    ​   每个应用是以一个整体的形式暴露给操作系统去管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等等

    进程被谁执行:

    ​   CPU最终运行你的程序,操作系统调用作用,将磁盘上的程序读取到内存中,然后交由CPU处理

    ​   CPU正在运行的一个程序,即:开启了一个进程

    二丶操作系统

    定义:

       操作系统是存在于硬件和软件之间,管理/协调/调度软件与硬件的交互

    作用:

       一:将一些丑陋复杂的硬件操作封装成一个美丽的接口,给用户使用

       二:合理的调度分配多个进程与cpu的关系,

    三丶操作系统的发展史(多道技术)

    历史:

    ​   第一代计算机:电子计算机

    ​      优点:独享,

    ​      缺点: 浪费资源,所有的程序都是串行

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

    ​      优点:节省了程序员连接硬件的时间

    ​      缺点:不能独享计算机,不能再运行程序修改BUG,CPU还是串行

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

    ​      阻塞:IO阻塞,recv,accept,read,input,write,sleep等

    ​      合并计算机类型:将科学计算,密集计算和归档,IO密集型计算机合并

    ​      优点:解决了时间和空间上的问题.提高计算机的运算效率和开发效率

    ​      缺点:数据隔离,不能独享

    ​   第四代计算机:超大规模的集成电路,微处理器

    ​      优点: 沿用至今,优点就是好.

    多道技术:时间和空间上的复用

    ​   多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题

    ​   空间复用:内存可以加载多个进程,前期没有实现物理隔离.

    ​   时间复用: 操作系统可以调配cpu在不同的进程之间切换.雨露均沾.(遇到IO阻塞就会切换,一个进程的停留时间过长,就会切换.)

    ​      当cpu遇到IO就切换,提升效率

    ​      一个进程占用CPU时间过长也会切换,为了实现并发效果,反而会降低程序执行的效率

    四丶进程介绍

    进程与程序的区别

    ​   1.程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;

    ​   2.程序是静态的观念,进程是动态的观念;

    ​   3.进程具有并发性,而程序没有;

    ​   4.进程是竞争计算机资源的基本单位,程序不是。

    ​   5.进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序

    简单概念

    ​   串行:所有的进程都是CPU依次结局

    ​   并发:单个CPU, 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。(多道技术,CPU会自动切换)

    ​   并行:当系统有一个以上CPU时,一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。

    ​   阻塞:遇到IO就阻塞

    ​   非阻塞:没有IO

    进程创建

    ​   定义:

    ​      进程之间是相互独里的,数据不共享.子进程是克隆父进程的数据

    ​      在python中,想要开启一个多进程必须是由主进程,开启子进程

    ​   进程的三个状态:

    ​      运行(running)态:进程占有处理器正在运行。

    ​      就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。

    ​      等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。


    ​ 图片来自百度百科

    区别:windows 和 Linux 创建进程

    ​   相同点:

    ​      原则:主进程开启子进程两个进程都有相互隔离的独立的空间,互不影响.

    ​   不同点:

    ​      linux: 子进程空间的初始数据完全是从主(父)进程copy一份.

    ​      windows: 子进程空间的初始数据完全是从主(父)进程copy一份,但是有所不同.
    ​       windows: 使用 CreateProcess, 创建进程

    ​       linux: 使用fork() 创建进程

    五丶python并发编程之:多进程

    使用函数开启多进程

    # -*-coding:utf-8-*-
    # Author:Ds
    import  time
    
    
    def task(name):
        print(f'{name} is runing')
        time.sleep(3)
        print('over')
    
    if __name__ == '__main__':
        p=Process(target=task,args=('子进程',)) # 创建开启进程对象, target:指定函数名,args:接收元组参数
        p.start()
        print('in 主进程')
    
    

    使用类开启多进程

    # -*-coding:utf-8-*-
    # Author:Ds
    from multiprocessing import  Process
    import  time
    
    class MyProcess(Process):
        def __init__(self,name):
            super().__init__() # 执行父类的初始化方法,开启进程
            self.name=name
            
        def run(self) -> None:     # 开启新的进程要执行的方法
            print(f'{self.name} is runing')
            time.sleep(3)
            print('over')
    
    if __name__ == '__main__':
        p=MyProcess('子进程') # 实例化自定义开启进程对象
        p.start()
        print('in 主进程')
    
  • 相关阅读:
    如何解决aws解绑银行卡问题?
    如何解决macbook pro摄像头不工作的问题
    Window安装AutoCAD
    Mac应用程序无法打开,提示不明开发者或文件损坏的处理方法
    Android硬件抽象层(HAL)深入剖析(三)【转】
    Android硬件抽象层(HAL)深入剖析(二)【转】
    Android硬件抽象层(HAL)深入剖析(一)【转】
    Glide的用法
    Gradle-5.3:依赖-管理依赖的版本(传递(transitive)排除(exclude)强制(force)动态版本(+))
    Android 7.0 FileProvider 使用说明
  • 原文地址:https://www.cnblogs.com/dengz/p/11215131.html
Copyright © 2020-2023  润新知