博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程注意的问题
阅读量:4970 次
发布时间:2019-06-12

本文共 781 字,大约阅读时间需要 2 分钟。

本文学习自博主。

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

1.上下文切换

2.死锁

3.资源限制

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

1.线程的运行机制:

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

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

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

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

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

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

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

4.减少上下文切换次数

  减少线程的数量

  控制同一线程上锁的数量

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

并发不当可能会产生死锁

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

2.如何避免死锁

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

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

  给锁和资源加超时时间;

计算机资源会限制并发

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

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

 

 

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

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

  

  

转载于:https://www.cnblogs.com/fenggedainifei/p/9667349.html

你可能感兴趣的文章
3-day3-list-truple-map.py
查看>>
Edit控件显示多行文字
查看>>
JS第二周
查看>>
dataTable.NET的search box每輸入一個字母進行一次檢索的問題
查看>>
Python 文件处理
查看>>
邻接表详解
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
OPENSSL使用方法
查看>>
接口操作XML
查看>>
idhttp访问DATASNAP有密码验证的中间件
查看>>
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>