并发编程的挑战

作者: hello2mao | 来源:发表于2017-08-28 21:49 被阅读38次

    一、上下文切换

    1. 含义
      CPU通过给每个线程分配时间片来实现多线程,时间片一般是几十毫秒。当任务时间片用光后会切到下一个任务,但是,在切换前会保存上一个任务的状态,以便切换回这个任务的时候可以再加载这个任务。任务从保存状态到再加载的过程就是一次上下文的切换。
    2. 如何减少上下文切换
      (1)无锁并发编程。如将数据合理分段,不同线程处理不同不同段数据。
      (2)CAS算法。Java的Atomic包使用CAS算法,就不需要锁。
      (3)避免创建不需要的线程。
      (4)协程。

    二、死锁

    避免死锁的常见方法:
    (1)避免一个线程同时获取多个锁。
    (2)避免一个线程在锁内同时占用多个资源。
    (3)尝试使用定时锁,trylock等。
    (4)对于数据库锁,加锁和解锁必须在一个数据库连接里。

    三、其他

    (1)thread.join()
    等待thread执行完毕后,在继续执行当前线程。

    相关文章

      网友评论

        本文标题:并发编程的挑战

        本文链接:https://www.haomeiwen.com/subject/qmcndxtx.html