zoukankan      html  css  js  c++  java
  • 使用多线程遇到的问题

    1、上下文切换

        CPU通过时间片分配算法来循环执行任务,当前任务执行-一个时间片后会切换到下一个任务。

        但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。

        所以任务从保存到再加载的过程就是一次上下文切换。

      解决方式:

        减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。

    2、死锁

      避免一个线程同时获取多个锁。

      避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。

      尝试使用定时锁,使用lock.tryLock(imeout)来替代使用内部锁机制。

      对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

    3、资源限制的挑战

        线程不是说越多越好

      方法就是,

        根据不同的资源限制调整程序的并发度,比如下载文件程序依赖于两个资源带宽和硬盘读写速度。

        有数据库操作时,涉及数据库连接数,如果SQL语句执行非常快,而线程的数量比数据库连接数大很多,则某些线程会被阻塞,等待数据库连接。

    https://baijiahao.baidu.com/s?id=1674003930734516720&wfr=spider&for=pc

  • 相关阅读:
    [武汉集训] Cliquers
    [NOI2017] 泳池
    [NOWCODER7] 小睿睿的方案
    动态dp初探
    [WC2008] 游览计划
    插头dp初探
    最小斯坦纳树初探
    2020ccpc总结
    Finding Palindromes
    最长非严格上升子序列的思考 && CF 1437E Make It Increasing
  • 原文地址:https://www.cnblogs.com/Jomini/p/15451571.html
Copyright © 2011-2022 走看看