zoukankan      html  css  js  c++  java
  • 进程和阻塞

    一、进程

      进程(Process)是保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。进程是一个实体,每一个进程都有它自己的内存空间

    进程和程序的区别:

    •  进程:一堆代码
    • 程序:正在运行的程序

    理论基础:

    一 操作系统的作用:
    1. 隐藏丑隨复杂的硬件接口,提供良好的抽象接口
    2. 管理调度进程并且将多个进程对硬件的竞争变得有序
    二多道技术:
    1.产生背员:针对单核,实现并发
      ps:
      现在的主机一般是多核,那么每个被都会利用多道技术
      有4个cpu.运行于cpu1的某个程序遇到1o阻塞,会等到:o结束再重新调度,会被调度到4个 cpu中的任意一个,具体由操作系统调度算法决定,
    2.空间上的复用:如内存中同时有多道程序
    3.时间上的复用:复用一个cpu的时间片
      强调:遇到1o切,占用cpu时间过长也切。核心在于切之前将进程的状态保存下来,这样
      才能保证下次切换回来时,能基于上次切走的位置继续运行 
    时间片:
      时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

    三进程的特征:

      动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

      并发性:任何进程都可以同其他进程一起并发执行

      独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

      异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

      结构特征:进程由程序、数据和进程控制块三部分组成。

      多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

    注意:同一个程序执行两次,就会在操作系统中出现两个进程,所以我们可以同时运行一个软件,分别做不同的事情也不会混乱

    进程调度算法

       先来先服务(FCFS)可用于做业调度和进程调度,有利于长作业,不利于短作业,适用于cup繁忙,不适用于I/o繁忙

      短作业(SJ/PF)是先执行短作业

       时间片轮算法和多级反馈队列

    进程的并发与并行

    并行 : 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU )

    并发 : 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。

    区别:

      并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
      并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。

    同步异步非阻塞

      

     三种状态

    • 就绪状态
      • 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
    • 执行/运行状态
      • 当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
    • 阻塞状态
      • 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等

    同步异步

      所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。

      所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列

    阻塞与非阻塞

       阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的

    阻塞与异步结合的几种形式

    1. 同步阻塞形式
    2. 异步阻塞形式 
    3. 同步非阻塞形式 
    4. 异步非阻塞形式
  • 相关阅读:
    提高代码质量:如何编写函数
    如何写自我评价
    写简历注意事项
    Android开发注意细节
    Android:onNewIntent()触发机制及注意事项
    Atom与markdown
    Java程序性能优化总结
    Java中的继承与组合
    Fragment生命周期总结
    C# 生成随机姓名
  • 原文地址:https://www.cnblogs.com/weilantian/p/11754391.html
Copyright © 2011-2022 走看看