并发编程注意的问题

本文学习自博主

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

1.上下文切换

2.死锁

3.资源限制

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

1.线程的运行机制:

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

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

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

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

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

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

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

4.减少上下文切换次数

  减少线程的数量

  控制同一线程上锁的数量

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

并发不当可能会产生死锁

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

2.如何避免死锁

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

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

  给锁和资源加超时时间;

计算机资源会限制并发

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

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

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

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

  

  

猜你喜欢

转载自www.cnblogs.com/fenggedainifei/p/9667349.html