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

  • 相关阅读:
    UE4项目《和平精英》渲染技术浅析
    如何用CMake构建Android C++库
    Unity Native Plugin
    多边形三角化
    参考图
    Unity SRP学习笔记
    Macbook Pro HDMI 无信号解决办法
    CGAL计算几何算法库
    无标记动作捕捉
    PS 鼠绘
  • 原文地址:https://www.cnblogs.com/Jomini/p/15451571.html
Copyright © 2011-2022 走看看