zoukankan      html  css  js  c++  java
  • 进程的理论基础

    操作系统和应用程序

    操作系统介于计算机硬件和软件之间,本质也是一个软件,用来协调,管理和控制计算机和软件的控制大软件,由操作系统的内核以及系统调用两部分组成,所处的位置如下:

    作用:

    1. 隐藏丑陋复杂的硬件接口,提供良好的抽象接口
    2. 管理,调度进程,将多个进程变得有序

    多道技术:

    1. 产生背景:针对单核,实现并发
    2. 空间上的复用:内存中同时又多道程序
    3. 时间上的复用:复用一个cpu的时间片
    4. 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样才能保证下次切换回来时,能基于上次且走的位置继续运行

    操作系统与普通软件的区别

    1. 由硬件保护,不能被用户修改

    2. 操作系统是一个大型,复杂,长寿的软件

    • 大型:linux或windows的源代码有五百万行数量级。按照每页50行共1000行的书来算,五百万行要有100卷,要用一整个书架子来摆置,这还仅仅是内核部分。用户程序,如GUI,库以及基本应用软件(如windows Explorer等),很容易就能达到这个数量的10倍或者20倍之多。
    • 长寿:操作系统很难编写,如此大的代码量,一旦完成,操作系统所有者便不会轻易扔掉,再写一个。而是在原有的基础上进行改进。(基本上可以把windows95/98/Me看出一个操作系统,而windows NT/2000/XP/Vista则是两位一个操作系统,对于用户来说它们十分相似。还有UNIX以及它的变体和克隆版本也演化了多年,如System V版,Solaris以及FreeBSD等都是Unix的原始版,不过尽管linux非常依照UNIX模式而仿制,并且与UNIX高度兼容,但是linux具有全新的代码基础)

    进程

    定义:正在进行的一个过程或任务,负责执行任务的是cpu

    进程与程序的区别:

    程序仅只是一堆代码,进程指的是程序运行过程

    并发与并行

    并发

    伪并行,即同时运行,单个cpu + 多道技术就可以实现并发(并行也属于并发),我理解并发类似于物理上的串联,但也有所不同

    你是一个cpu,你同时谈了三个女朋友,每一个都可以是一个恋爱任务,你被这三个任务共享
    要玩出并发恋爱的效果,
    应该是你先跟女友1去看电影,看了一会说:不好,我要拉肚子,然后跑去跟第二个女友吃饭,吃了一会说:那啥,我
    去趟洗手间,然后跑去跟女友3开了个房
    并发举例

    并行

    同时运行,只有具备多个cpu才能实现并行,单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的)

    假如有四个核,现有六个任务,这样同一时间只能运行四个任务,分别被分配各了cpu1,cpu2,cpu3,cpu4,一旦任务1遇到I/O就被迫中断执行,此时任务5就拿到cpu1的时间片区执行,这就是单核下的多道技术

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

    现代的计算机经常会在同一时间做很多件事,一个用户的PC,都可以同时运行多个任务,一个任务即一个进程

    比如:

    • 我们玩着游戏听着歌
    • 玩着游戏看着小姐姐的直播
    • 边聊天边看电影
    • 以上这些进程都需要被管理,㐊一个支持多进程的多道程序系统是至关重要的
    •  同步/异步and阻塞/非阻塞

    同步:

    在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,大多数函数都是同步调用,但是我们在说同步,异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务

    异步:

    和同步相对,当一个异步功能调用发出后,调用者不能立刻得到结果,当该异步功能完成后,通过状态,通知或回调来通知调用者,不要用状态来通知,若这样则会造成调用者就需要每隔一定的时间检查一次,效率就很低;要使用通知的方式,效率就会很高,因为异步功能几乎不需要额外的操作

    阻塞:

    指调用结果返回之前,当前线程会被挂起(如遇到io操作),函数只有在得到结果后才会将阻塞的线程激活,与同步调用是不同的,对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已

    #举例:
    #1. 同步调用:apply一个累计1亿次的任务,该调用会一直等待,直到任务返回结果为止,但并未阻塞住(即便是被抢走cpu的执行权限,那也是处于就绪态);
    #2. 阻塞调用:当socket工作在阻塞模式的时候,如果没有数据的情况下调用recv函数,则当前线程就会被挂起,直到有数据为止。

    非阻塞:

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

    总结:

    #1. 同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。
    
    #2. 阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程
  • 相关阅读:
    面向对象--选课系统作业
    面向对象--本章总结
    面向对象--本章总结---练习题
    16 python 异常处理
    5.15 python 面向对象的软件开发&领域模型
    14 元类
    intellijidea课程 intellijidea神器使用技巧 6-2 数据库关联
    intellijidea课程 intellijidea神器使用技巧 6-1 Spring的关联
    intellijidea课程 intellijidea神器使用技巧 5-2 localhistory
    intellijidea课程 intellijidea神器使用技巧 5-1 svn相关
  • 原文地址:https://www.cnblogs.com/--kai/p/9621215.html
Copyright © 2011-2022 走看看