• 并发编程



    1.操作系统的功能:

    1.隐藏丑陋复杂的硬件接口,提供良好的抽象接口,供程序来调 eg: f.open() f.close()
    2.管理,调度进程,负责将多个进程对硬件的竞争变得有序。(qq,word,暴风) ---》 (cpu 内存 硬盘)

                     


    2.操作系统的发展史:
    1.1940-1955(第一代计算机) 真空管和穿孔卡片 没有操作系统 没有编程语言
    2.1955-1965(第二代计算机) 晶体管和批处理系统 优点:批处理,节省了时间 缺点:人控制,串行(一个一个)


    3.1965-1980(第三代计算机) 集成电路芯片和多道程序设计 任然是:批处理,由于没有实现多个程序在内存中相互隔离
    多道技术:空间上的复用: 内存中同时有多道程序。暴风,word,音乐,都在内存中,物理层面上,保证多个程序的内存是相互隔离的
    时间上的复用: 复用一个cpu的时间片。cpu轮流执行暴风,word,谁在进行io操作,cpu就离开谁,执行其他的程序。
    cpu来回切(速度非常快,一个时间cpu只能运行一个),切走之前,需要保存状态,下次回来,接着运行。
    1.io阻塞,cpu会切,提升cpu的运行效率
    2.一个程序占用cpu时间过长,cpu会切,即使只有一个cpu,给人的感觉,机器上能跑多个程序。并发。不能提升cpu运行效率。反而会降低。
    并发:看起来是同时运行。
    (多道技术:时间多路复用+空间多路复用+硬件上支持隔离)
    多道技术产生得背景:
    针对单核,实现并发
    ps:现在的主机一般是多核,每个核都会利用多道技术。eg:4个cpu,运行于cpu1的某个程序遇到io切,下次重新调度时,会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。
    分时操作系统:
    多个联机终端 + 多道技术
    --》 ken Thompson unix 7个终端同一时间操作这台机器
    --》 1987 minix 用于教学 芬兰学生Linus Torvalds 编写了 Linux ( redhat centos ubuntu )
    4.1980 - 至今(第四代计算机) 个人计算机

    3.并发/并行:
    并发:
    伪并行,看起来是同时运行,单个cpu+多道技术就可以实现并发 单核
    并行:
    同时运行,只有具备多个cpu才能同时运行。 多核(每个核+ 多道技术)
    需知:进程的调度,分配给哪个cpu运行,由操作系统说了算。

    4.进程/程序:
    进程:
    正在进行的一个过程或者说一个任务,而负责执行任务的是cpu
    程序:
    程序仅仅只是一堆代码而已,而进程指的是程序的运行过程

    强调:同一个程序执行两次,是两个进程。eg:暴风可以播放两个不同的视频

    5.进程的创建:
    1.系统初始化
    2.一个进程在运行过程中开启了子进程(subprocess.Popen os.fork)
    3.用户的交互式请求
    4.一个批处理作业的初始化
    无论哪一种,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的:
    1.unix:系统调用:fork, 进程之间内存隔离 (子进程和父进程是可以有只读的共享内存区的)
    2.windows:系统调用:CreateProcess,进程之间内存隔离 (子进程与父进程的地址空间是不同的)

    6.进程的终止:
    1.正常退出 linux:exit windows:ExitProcess
    2.出错退出 python a.py a.py不存在
    3.严重错误 try...except...
    4.被其他进程杀死 kill -9

    7.进程的层次:
    无论unix,windows,进程只有一个父进程
    1.unix 所有进程都是以init进程为根,组成树形结构,父子进程共同组成了一个进程组。
    2.windows 没有进程层次的概念,创建进程时,父进程得到一个特别的令牌(称为句柄),可以用来控制子进程。

    8.进程的状态:
    两种情况会导致一个进程在逻辑上不能运行:
    1.遇到IO阻塞,便要让出cpu让其他进程去执行,保证cpu一直在工作
    2.一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用cpu
    一个进程有三种状态:

    9.进程并发的实现:
    进程并发的实现在于,硬件中断一个正在运行的进程,把此时进程运行的所有状态保存下来,为此,操作系统维护了一张表格,即进程表(process table)

    参考:
      http://www.cnblogs.com/linhaifeng/p/7278389.html
      http://www.cnblogs.com/linhaifeng/articles/6817679.html





  • 相关阅读:
    用vbox搭建Linux服务器
    mysql数据库两表关联查询统计同一字段不同值的个数
    2019-06-16 Java学习日记之XML&tomcat
    2019-06-15 Java学习日记之mysql多表查询
    2019-06-14 Java学习日记之SQL
    2019-06-13 Java学习日记之MySql
    XML & Tomcat
    数据库的CRUD操作
    PrepareStatement
    Dao模式(data Access Object 数据访问对象)
  • 原文地址:https://www.cnblogs.com/alice-bj/p/8692271.html
Copyright © 2020-2023  润新知