美文网首页
1.上下文切换及死锁

1.上下文切换及死锁

作者: 农民工进城 | 来源:发表于2019-06-02 15:06 被阅读0次

文章要点

1.上线文切换
2.死锁

1.1 上线文切换

1.1.1 概念

CPU是通过给线程分配时间片的手段来实现多线程的,只不过这个时间分片相对较快,切换也较快,所以给我们的错觉是多线程并行执行。
然而,现成的上下文切换,需要记录线程的状态,以便下次切回这个线程任务时,继续执行。这样来回切换其实比较影响效率。
所以说单核CPU且任务比较小的话,多线程不一定就快。

1.1.2 如何减少上下文切换

无锁化编程、CAS算法、减少使用线程和使用协程

  • 无锁化并发编程:多线程竞争锁,会引起上线文切换,所以多线程处理大数据时,可以hash算法将数据分给不同的线程,可以切分避免锁竞争
  • CAS算法:java中现成的Atomic包,可以用来CAS
  • 线程适量即可,不是越多越好
  • 协程:folk-join模式

1.2 死锁

1.2.1概念

死锁:简单来说两个或多个线程相互等待对方释放自己所需要的锁,导致这些线程处于等待状态,无法前往执行。
产生的条件如下:

  • 互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放
  • 请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用
  • 循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞
1.2.2 避免死锁

避免死锁:

  • 避免一个线程同事获取多个锁
  • 避免一个线程在锁内同时占用多个资源,尽量保证一个锁只占用一个资源
  • 尝试使用超时所

相关文章

  • 1.上下文切换及死锁

    文章要点 1.上线文切换2.死锁 1.1 上线文切换 1.1.1 概念 CPU是通过给线程分配时间片的手段来实现多...

  • 2:并发编程的挑战

    1:上下文切换 减少上下文切换的方法:无锁并发编程、CAS算法、使用最少线程和使用协程。 2:死锁 避免死锁的几种...

  • 并发编程01-对于并发的认知

    多线程和并发的概念 上下文切换 如何减少上下文切换无锁并发编程CAS算法使用最少线程协程 死锁避免死锁的几个常见的...

  • 第一章 并发编程的挑战

    并发编程相对于单线程的挑战有 上下文切换 死锁 1.常用工具 使用Lmbench可以测试上下文切换时长使用vmst...

  • java并发编程的艺术笔记第一章——并发编程的挑战

    1、并发编程的挑战来自哪里? 1.1、上下文切换 1.2、死锁 1.3、资源限制的挑战 1.1、上下文切换 单核处...

  • 并发基本原理以及常用工具类介绍

    并发编程的挑战: 频繁的上下文切换 死锁(线程循环依赖对方释放锁) 资源限制的挑战 如何减少上下文切换: 无锁并发...

  • 1. 并发编程的挑战

    多线程面临的挑战:上下文切换的问题、死锁、受限于硬件和软件的资源限制问题; 上下文切换 单个CPU通过分配时间片实...

  • 并发编程的挑战

    目前存在的挑战 上下文切换问题线程死锁问题硬件和软件资源限制问题 上下文切换 单核处理器也支持多线程执行代码,CP...

  • Java 并发编程(1): Java 内存模型(JMM)

    1. 并发编程 1.1 并发编程的挑战 并发编程的目的是为了加快程序的运行速度, 但受限于上下文切换和死锁等问题,...

  • 第一章 并发编程的挑战

    1.1上下文切换 多线程不一定就比单线程快,因为多线程存在上下文切换的问题、死锁的问题等问题, 测试循环累加和累减...

网友评论

      本文标题:1.上下文切换及死锁

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