zoukankan      html  css  js  c++  java
  • 进程和线程

    多道技术

    单道批处理系统:多个程序串行使用CPU

    多道程序设计技术:多个程序同时进入计算机的主存储器并启动,宏观上是并行的,多道程序处在运行中;微观上是串行的,各道程序轮流交替使用CPU.空间上的复用,一个CPU可以让多个用户使用

    • 空间上的复用:一个CPU可以提供给多个用户使用
    • 时间上的复用:切换+保存状态
      • 当CPU遇到IO操作[input(),print(),time.sleep()],会将当前执行程序的CPU使用权断开
        • 优点:CPU的利用率高
      • 当一个程序占用CPU时间过长,会断开当前CPU使用权
        • 缺点:程序的执行效率降低

    进程的调度

    先进先出算法

    最先进入的进程最先执行,一直到该进程结束,或阻塞时,释放

    缺点:若长时间先进入,后面无法使用

    短进程优先

    谁用时短,谁优先执行

    缺点:长时间进程需要被控很长时间

    时间片轮转法

    CPU执行时间1s中,加载N个程序,将1s等分未N个时间片.

    多级反馈队列

    将执行优先分为多层级别

    1:优先级最高

    2:优先级第二

    3:以此类推

    ......

    同步和异步

    指的是提交任务的方式

    同步:

    发送方发出数据后,等接收方回响应以后才发下一个数据包的通讯方式

    异步:

    发送方发出数据后,不等待接收方发回响应,接着发送下个数据包的通讯方式

    同步时阻塞模式,异步是非阻塞模式.

    注意:阻塞和非阻塞,同步和异步不是同一个概念!

    进程的回收

    孤儿进程

    父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程

    僵尸进程

    子进程终止,父进程尚未对其ID进行回收,变成僵尸进程.

    并发

    基本概念

    串行:排成一队一个个处理

    好的程序都是串并行结合的

    并发和并行的区别

    并行,parallel

    同时做某些事,可以互不干扰的同一个时刻做多件事

    并发,

    同时一个时刻或某一段时间内,需要有多件事需要做

    并行可以解决并发问题

    比如:十辆车要同时经过单车道,修建4车道,就是通过并行解决并发的问题

    并发的解决

    食堂打饭模型

    12点开饭,都涌向食堂,这就是并发.如果人特别多,这就时高并发.

    1.队列.缓冲区

    排成队列,就是一个缓冲地带,就是缓冲区

    如若有女士,那女士队就是一个优先队列

    2.争抢

    有人抢这打饭,抢到了就相当于锁定窗口,只是一种锁机制

    是一种解决高并发的解决方案,但是不好,因为有人长时间抢不到

    如果争抢,一定要有锁机制,不然争到了也会很快被别人抢掉

    3.预处理

    提前做80%的菜预备着

    一种提前加载用户需要的数据的思路,预处理思想,缓存常用

    4.并行

    相当于开多个窗口让人打饭,成本上升

    日常可以通过购买更多服务器,或多开进程,进程实现并行处理,来解决并发问题

    这些都是水平扩展思想

    注:

    如果线程在单CPU上处理,就不是并行了

    但是多数服务器都是多CPU的,服务的不是往往是多机的,分布的,这都是并行处理,

    5.提速

    提高单个窗口的打饭速度,也是解决并发的方式.

    提高单个CPU性能,或单个服务器安装更多的CPU

    这是一种垂直扩展的思想

    缺点:容易触到技术天花板,而且价格到后面会飙升

    6.消息中间件

    相当于缓冲,但是在系统外面(第三方)缓冲

    进程和线程

    在实现了线程的操作系统中,线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一个程序的执行实例就是一个进程.

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配调度的基本单位,是操作系统结构的基础.

    进程和线程的关系

    • 程序是源代码编译后的文件,而这些文件存放在磁盘上,当程序被操作系统加载到内存中,就是进程,进程中存放着指令和数据(资源),它也是线程的容器.进程就是个大集合,真正工作的是线程.

    • Linux进程有父进程,子进程,Windows的进程是平等关系.

    • 线程,有时侯被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.

    • 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.

    进程线程的理解

    现代操作系统提出进程的概念,每一个进程都认为自己独占所有的计算机硬件资源,

    进程就是独立的王国,进程间不可以随便的共享数据

    线程就是省份,同一个进程内的线程可以共享进程的资源,每一个线程拥有自己独立的堆栈.

    每个线程都有一个独立的线程id,用以区分不同的线程

    线程的状态

    1. 运行态

      该时刻,该线程正在占用CPU

    2. 就绪态

      可随时转换为运行态,因为其他线程正在运行而暂停,该线程不占用CPU

    3. 阻塞态

      除非某些外部事情发生,否则线程不能运行.等条件满足时,执行

    状态 含义
    就绪(Ready) 线程能够运行,但在等待被调度.可能线程刚刚创建启动,或刚刚从阻塞中恢复,或被其他线程抢占
    运行(Running) 线程正在执行
    阻塞(Blocked) 线程等待外部事件发生而无法运行,如I/O操作
    终止(Terminated) 线程完成,或退出,或被取消

    多进程.多线程的选择

    1.CPU密集型

    CPython中使用了GIL.多线程的时候锁相互竞争,且多核优势不能发挥,Python多进程效率更高

    2.IO密集型

    适合使用多线程,可以减少多进程间IO的序列化开销.且在IO等待的时候,切换到其他线程继续执行,效率大大的好.

    https://www.jianshu.com/p/873de32e37dd

    生产者消费者模型

    也叫缓存保定问题,是一个经典的,多进程同步问题.

    生产者往缓冲取写入数据,消费者从缓冲区拿去数据,两者同过缓冲区来进行通信,这样的话生产者不必担心要等待消费者使用完数据,消费者也不用担心不够时间处理所有数据

    协程

    协程是单线程下的并发,又称微线程,纤程,英文名Coroutine.

    协程是一种用户态的轻量线程,即协程是由用户程序自己控制调度.

    注意:

    1. Python线程是内核级别,即由操作系统控制调度,所以单线程遇到IO或者执行时间过长就会被迫交出CPU执行权限,切换其他线程运行.
    2. 单线程内开启协程,一旦遇到IO,就会从应用程序级别(非操作系统)控制切换,以此来提升效率.

    优点:

    1. 协程的切换开销更小,属于程序级别的切换,操作系统感觉不到,所以更加轻量级
    2. 单线程内就可以实现并发的效果,最大限度的利用CPU

    缺点:

    1. 协程的本质是单线程,无法利用多核.所以可以是一个程序开启开启多个进程,每个进程内开启多个线程,每个线程开启协程.
    2. 协程是单个线程,所以一旦出现阻塞,就会阻塞整个线程.

    使用gevent模块

  • 相关阅读:
    Linux下php安装
    apache的安装
    线性dp
    蓝桥杯 算法训练 文章翻转
    蓝桥杯 算法训练 连通块
    Distributed Transaction Coordinator 无法启动
    WCF使用小结:(1)WCF接收HTTP POST数据的处理方法
    删除空文件夹 清除CS扩展名文件 bat
    Linux下如何修改ip地址
    is not in the sudoers file 问题解决【转载】
  • 原文地址:https://www.cnblogs.com/agsol/p/11716017.html
Copyright © 2011-2022 走看看