zoukankan      html  css  js  c++  java
  • atomic

    原子指令:指cpu的执行单元,不会因其他信息被打断。

    多核编程注意点:

      race condition:多线程共同修改同一个cacheline

      ABA problem:一个线程两次读取一个cacheline值不变,但再第二次读取之前,有一个线程执行更改其值,执行其他工作,然后将其值改回来,欺骗第一个线程,值没发生变化

      memory fence:Memory barrier,现代cpu使用性能优化,可能会导致指令乱序执行。c++11 std::atomic提供支持

    thread 1
    p.init();
    ready= true;
    
    thread 2
    if (ready)
        p.do();
    //p.init()可能被cpu排序在ready=true后

      cacheline:变量按访问的规律排序,频繁访问变量应对齐cacheline,且尽量独立一个cacheline。或者各线程拥有TLS,在需要时再合并所有线程中的值

      spurious wakeup:在多线程情况下,一个条件变量似乎发出信号,但等待条件可能仍然为false

      wait-free:不管os如何调度线程,每个线程都始终在做有用的事

      lock-free:不管os如何调度线程,至少有一个线程在做有用的事

      mutex并不一定比wait-free或者lock-free慢,代码越多,时长就越长,mutex出现竞争时会使调用者睡眠,使拿到锁的那个线程可以很快独占完成一系列流程,总体吞吐可能反而高。mutex导致低性能往往是因为临界区过大(限制了并发度),或竞争过于激烈(上下文切换开销变得突出)

      

  • 相关阅读:
    Selenium2+python自动化20-Excel数据参数化【转载】
    linux下安装jdk
    linux下的tomcat自动退出的问题
    操作笔记:tomcat在正式环境的常见问题和idea的远程调试
    Maven 的41种骨架
    ant风格是什么?
    tomcat 页面管理
    操作笔记:linux下查看端口被占用
    操作笔记:linux下安装ftp
    linux下的mysql乱码问题
  • 原文地址:https://www.cnblogs.com/Call-C/p/8360237.html
Copyright © 2011-2022 走看看