zoukankan      html  css  js  c++  java
  • 并发一些概念

    进程之间通讯用什么:

      套接字、信号处理器、共享内存、信号量、文件。

    线程之间通讯用什么:

    线程的好处:

      发挥多处理器处理能力

      建模简单

      异步事件处理简单

      界面反应加快

    线程带来的风险:

    线程安全问题:永远不要发生糟糕的事 线程之间交替操作会导致错误

    线程的活跃性问题:某件正确的事情最终会发生。比如,死锁 饥饿 活锁(不明白)

    性能问题:

      上下文切换开销:

        保存和恢复上下文

        丢失局部性

        cpu化时间在线程调度

        线程共享数据时,必须同步,会抑制编译器优化,使内存缓冲区数据失效,增加共享内存总线同步流量。

    原子性:

    一组操作不可分离,或同时成功,或同时失败

    竞态条件:

      不恰当的执行时序而出现不正确的结果叫做竞态条件,Race Condition。

      当某个计算的正确性取决于多个线程交替执行的时序时,就会发生竞态条件。

      常见的竞态条件类型就是先检查后执行(check-then-act),通过一个可能失效的观测结果(重点是这个)来决定下一步的动作的情况。

    加锁机制:

    内置锁:synchronized (lock) {}

    重入:线程可以获得由它自己持有的锁

    同步方式:

      synchronized

      volatile

      Explicit Lock

      原子变量

    同步问题的解决方式:

      不在线程之间共享状态变量

      将状态变量修改位不可变变量

      在访问状态变量时使用同步

    同步规则:

    简单性(对整个方法进行同步)

    并发性(同步代码路径尽可能短)

    对象的共享:

    1. 可见性

    一个线程改变了共享对象的状态,其他的线程能够看到对象状态的变化。

    大概就是A线程为了更快的操作共享对象而在自己的栈中复制一份共享对象,修改之后又不会立即更新共享内存中的对象状态,这样别的线程就不能看到A线程的修改。

  • 相关阅读:
    学习进度——第十周
    梦断代码读后感03
    DFS入门——数的拆分
    DFS入门——素数环问题
    排列LCS问题
    洛谷P1436 棋盘分割 题解 二维区间DP
    洛谷P1241 括号序列 题解 栈
    《算法艺术与信息学竞赛》第1章 算法与数据结构 学习笔记
    洛谷P1563 玩具谜题(NOIP提高组2016 D1T1)题解 模拟
    洛谷P5022 旅行(NOIP提高组2018 D2T1)题解 贪心/去环
  • 原文地址:https://www.cnblogs.com/gengsc/p/7133616.html
Copyright © 2011-2022 走看看