zoukankan      html  css  js  c++  java
  • 并发编程基础

    并发编程基础:

      多道技术:

        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. 锁必须在主进程中产生,交给子进程去使用

  • 相关阅读:
    windows下编译及使用libevent
    安装和使用memcached
    BroadcastReceiver插件化解决方案
    Service插件化解决方案
    Activity插件化解决方案
    换肤-插件化
    资源的插件化
    startActivity进行Hook
    代理模式
    对反射的封装
  • 原文地址:https://www.cnblogs.com/pupy/p/11340372.html
Copyright © 2011-2022 走看看