并发常见问题

来源:互联网 发布:微信一键转发程序源码 编辑:程序博客网 时间:2024/06/05 14:04
并发编程
1.上下文切换

      CPU会给每个线程分配CPU时间片,当前任务执行一个时间片后会切换下一个任务。但切换前保存上一个任务的状态,以便下次切换可加载该线程的任务状态。其实每一个任务切换都会耗时耗资源。
2.如何减少上下文切换
      无锁并发编程、cas算法、使用最少线程、通过协程
3.产生死锁
      指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
4.避免产生死锁
     避免一个线程同时获取多个锁
     避免一个线程占用多个资源
     可以使用定时锁进行控制
5.资源限制
     程序执行受限于计算机硬件或软件资源。
6.volatile
    volatile变量修饰的共享变量进行写操作,汇编代码会出现lock命令。lock指令会在多核情况中引发两件事
      1.当前处理器缓存行的数据写回系统内存
      2.这个写回内存操作会使其他CPU缓存了该内存地址的数据无效
7.Synchonized原理
    jvm基于进入和退出monitor对象实现方法同步和代码块同步。monitorenter 会出现同步代码开始,monitorexit会出现作用域结束处和异常处
8.锁
    偏向锁:同一个线程多次获得锁,偏向锁在栈帧中记录锁偏向的线程ID,以后该线程再次进入不需要进行CAS操作来加锁和解锁,只需要测试对象是否存储着指向当前线程的偏向锁
    轻量锁
    重量锁
9.处理器如何处理实现原子操作
   1 .使用总线锁保证原子型,总线锁会把CPU和内存之间通信锁住,其他处理器不能处理其他内存地址的数据
   2.使用缓存保证原子性,修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性