并发编程基础

并发编程基础:

  多道技术:

    1. 空间上的复用

      多个程序共用一套计算机硬件

    2. 时间上的复用   (切换+保存状态)

      2.1 当一个程序遇到 IO 操作,操作系统会剥夺该程序的 cpu 执行权限(提高了 cpu 的利用率 并且也不影响程序的执行效率)

                    IO 操作(input 、 ouput、 sleep、 accept、 recv 等阻塞态)

      2.2 当一个程序长时间占用 cpu 操作系统也会剥夺该程序的 cpu 执行权限(降低了程序的执行效率)

    

  并发:看起来像同时运行的就可以

  并行:真正意义上的同时执行

  注:单核的计算机能不能实现并行,但是可以实现并发

  程序:就是未执行的代码块

  进程:正在运行的程序

     

  进程调度:(规则)

    要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。

    时间片轮转法 + 多级反馈队列https://www.cnblogs.com/Dominic-Ji/articles/10929384.html

  进程状态:程序不会立刻进入运行态,都会先在就绪态等待cpu的执行

    进程三状态图:

      

  同步 & 异步:表示的是 任务的提交方式

    同步:任务提交之后,原地等待 的任务的执行并 拿到返回结果 才走,期间不做任何事(程序层面的表现就是卡住了)

    异步:任务提交之后,不再原地等待,而是继续执行下一行代码( 结果是要的 ,但是是用过其他方式获取)

  阻塞 & 非阻塞:表示的 程序的运行状态

    阻   塞:阻塞态

    非阻塞:就绪态,运行态

  强调:同步 & 异步、阻塞 & 非阻塞 是两对概念 不能混为一谈

  僵尸进程 & 孤儿进程

    所有的进程都会步入僵尸进程:

            父进程回收子进程资源的两种方式:

                        1. join方法

                        2. 父进程正常死亡

    孤儿进程:

        子进程没死,父进程意外死亡(会被系统的儿童福利院回收,重新成为子进程)

  互斥锁:

    当多个进程操作同一份数据的时候,会造成数据的错乱,这个时候必须加锁处理

    在进行数据操作的时候,将并发变成串行,虽然降低了效率但是提高了数据的安全

    注:1. 锁不要轻易使用 容易造成死锁现象

      2. 只在处理数据的部分加锁 不要在全局加锁

      3. 锁必须在主进程中产生,交给子进程去使用

原文地址:https://www.cnblogs.com/pupy/p/11340372.html