zoukankan      html  css  js  c++  java
  • 并发编程注意的问题

    本文学习自博主

    并发是为了提高程序的执行速度,并不是线程越多越好,并发过程要注意三个问题:

    1.上下文切换

    2.死锁

    3.资源限制

    上下文切换会带来额外的开销

    1.线程的运行机制:

      一个CPU每一时刻只能执行一条主线程;

      操作系统会给每条线程分配不同长度的时间片;

      操作系统会随机从就绪等待状态的线程中随机选取一条执行;

      每条线程用完自己的时间片后,即使线程没有执行完毕也会停止执行,操作系统随机选取一条新线程执行;

    2.上下文切换:当一条线程的时间片用完后,操作系统会停止该线程,并保存当前线程的信息状态,然后选取一条新线程来执行。

    3.上下文切换是有开销的

      每次上下文切换都需要保存当前线程的执行状态,并加载新线程先前状态。如果上下文切换频繁,那么CPU花在上下文切换的时间占比增加,真正处理任务的占比就会减少,因此,为了提高处理任务的  效率,我们就要减少上线问起切换次数。

    4.减少上下文切换次数

      减少线程的数量

      控制同一线程上锁的数量

      采用无锁并发编程:1)无共享变量,独立执行。2)有共享变量,控制执行顺序(CAS算法)

    并发不当可能会产生死锁

    1.死锁:多条线程相互等待已经被对方占用的资源时产生。

    2.如何避免死锁

      不要在一个线程中嵌套使用多个锁;

      不要在一个线程中嵌套占用多个计算机资源;

      给锁和资源加超时时间;

    计算机资源会限制并发

    硬件资源:磁盘读写速度,带宽等。

    软件资源:Socket连接数,数据库连接数等。

    当程序执行线程时,并非是一行一行的运行代码,要进行重排序。、

    重排序:编译器处理器在不改变程序结果的前提下,重新排列指令的执行顺序,以达到最佳运行效率。

      

      

  • 相关阅读:
    [DB2]删除大数据量数据及57011错误处理
    [DB2]DB2日常维护——REORG TABLE命令优化数据库性能
    [转]解读DIV CSS网页布局中CSS无效十个原因
    [DB2]DB2 sqlstate 57016 原因码 "7"错误
    [翻译]15个最常见的WCF问题
    [DB2]DB2数据库备份与恢复和导出表结构与导入导出表数据
    [转]网站(bs系统)怎样实现即时消息思路总结
    【摘抄】DB2字符集问题
    [转]jQuery必知必熟基础知识
    sql 2005/2008 订阅与发布的几个概念
  • 原文地址:https://www.cnblogs.com/fenggedainifei/p/9667349.html
Copyright © 2011-2022 走看看