zoukankan      html  css  js  c++  java
  • python--9、进程及并发知识

    进程

    一个文件的正在执行、运行过程就成为一个进程。
    执行多个程序,把程序文件都加载到内存,并且多个程序的内存空间隔离--空间上的复用。 遇到IO等待,切CPU到别的程序,提升效率。没有IO,一个程序占用CPU过久也要切换,效率变低--时间上的复用。
    为了让所有程序员都觉得自己独占计算机资源,多个终端联机让他看起来没问题,并且采用多道技术,所有的终端很小概率会同事都在执行指令,。
    ###分时操作系统。
    为了提高效率,写程序时尽量减少IO。
    保存状态+切换

    进程基本特征:动态性、并发性、独立性、异步性和结构特征。 
    进程结构上包括:程序段、数据段、进程控制块PCB(Process Control Block)组成。PCB是进程存在的唯一标识。系统通过PCB对进程进行控制和管理。 
    为了方便进程的调度和管理,需将各进程的PCB以适当方法组织起来。常见的有链接方式和索引方式。 
    链接方式就是形成队列,如就绪队列、阻塞队列。 
    索引就是将同一状态的进程组织在一个索引表中,如就绪索引表、阻塞索引表。 
    进程基本状态:阻塞、就绪、运行。引起状态转化的事件有:IO操作和占用CPU时间时间过久。
    进程的阻塞与唤醒: 
    阻塞:执行转阻塞,唤醒:阻塞转就绪。阻塞是进程自己主动的,唤醒是被动由其他进程唤醒的。

    并发编程

    下载好的程序就是一堆文件。
    一个操作系统上跑多个软件,共享硬件。软件对硬件资源的竞争归系统管,把竞争变得有序化。

    并发与并行

    无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务

          一 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发)

         二 并行:同时运行,只有具备多个cpu才能实现并行

             单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的

             有四个核,六个任务,这样同一时间有四个任务被执行,假设分别被分配给了cpu1,cpu2,cpu3,cpu4,

             一旦任务1遇到I/O就被迫中断执行,此时任务5就拿到cpu1的时间片去执行,这就是单核下的多道技术

             而一旦任务1的I/O结束了,操作系统会重新调用它(需知进程的调度、分配给哪个cpu运行,由操作系统说了算),可能被分配给四个cpu中的任意一个去执行      

    操作系统的作用:
    • 隐藏硬件接口,提供好的抽象接口
    • 管理、调度进程,并且将多个进程对硬件的竞争变得有序。
    多道技术
    • 空间复用:多个程序的文件同时读入内存并且做到隔离
    • 时间复用:把CPU的时间平均分配给每一个进程,或者 在进程IO时利用这一段IO等待时间运行别的进程

    并发与并行

    • 并发、一个CPU利用多道技术实现看起来多个同时运行
    • 并行、多核心的CPU同时运行多个程序,一个核心对应一个程序

    同步

    提交一个任务后,在原地等着,等到该任务运行完毕,拿到结果以后,再执行下一行代码。--会导致程序变为串行执行(.result())

    异步

    提交一个任务后,不会等着,直接执行下一行代码。,--并行的提交任务,容器存储每个任务的状态,等进程池完毕后,再取结果。

    阻塞

    #阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。函数只有在得到结果之后才会将阻塞的线程激活。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
    #举例:
    #1. 同步调用:apply一个累计1亿次的任务,该调用会一直等待,直到任务返回结果为止,但并未阻塞住(即便是被抢走cpu的执行权限,那也是处于就绪态);
    #2. 阻塞调用:当socket工作在阻塞模式的时候,如果没有数据的情况下调用recv函数,则当前线程就会被挂起,直到有数据为止。

    非阻塞

    非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程。

    总结

    1. 同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。
    
    2. 阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程
        
    必会知识:
    #操作系统:为了方便操作、管理硬件
    #所有一切都是为了解放人力。
    计算机组成原理、操作系统原理、一门语言、网络(协议知识)、数据结构。
  • 相关阅读:
    实习第五十七天
    武汉第五十六天
    武汉第五十五天
    常用环境配置
    http 基本验证(nginx)
    nginx configuration
    docker run demo
    初识Hadoop
    大数据简介
    HDFS 存放策略
  • 原文地址:https://www.cnblogs.com/jinyudong/p/7857876.html
Copyright © 2011-2022 走看看