理解高并发_我对并发编程的理解

  对于并发编程, 涉及的技术点非常多, 我们首先需要明确一些基本概念,只有概念清晰,才能做到在以后深入学习关键技术的过程中不致于感觉到吃力和迷惑。 其次,我们还需要明白在并发编程最需要关注的问题是什么? 带着关键问题去学习,才能够起到事办功倍、稳扎稳打的效果。
      下面是我所总结的一些很多人容易混淆的概念:

     1. 高并发、多线程
  ● 高并发
                 高并发是请求,指的是多个客户端同一时刻向服务端发送请求, 它是一种现象。
                 比如,电商网站在双11凌晨12:00分 同时有2000个下单请求。
  ● 多线程
                  多线程是处理,指的是同一时刻多个执行者处理同一类的任务, 它有具体的实现。比如
                  电商网站在双11凌晨12:00分同时有100个线程处理2000个下单请求。
             
2. 并行、并发
  ● 并行
           多核cpu的情况, 多个任务执行者并行处理任务
  ● 并发
           单个cpu的情况下,cpu间断性的执行多个任务。
       举个打扫房间的例子,如果你有1把扫帚需要打扫2个房间, A房间打扫到一半的时候,你再切换到B房间,这就现象称之为并发; 如果你有2把扫帚,这个时候就可以同时打扫2个房间了,这种现象称之为并行。
     
3. 多线程就一定效率高吗?
      从上面打扫房间的例子可以看出, 多线程并非效率一定高。  只有在并行的情况下效率才能保证, 并发需要做上下文切换,会影响整体性能。

4. 并发编程需要注意的2个问题
      并发编程尤其需要注意的是共享数据的安全性和锁性能方面的问题, 在并发编程领域的讨论中,几乎90%以上都是围绕这2大主题展开,甚至jdk每个版本的升级都有针对这2方面问题做优化,  如jdk5之后的各种锁优化技术、volatile、threadlocal关键字等。
  ● 共享数据的安全性问题
            堆内存和方法区内存可以共享。 因此成员变量和静态变量存在数据安全性问题。
           
  ● 锁竟争带来的程序效率问题
                  多个线程访问共享资源时,只有获取到锁的线程才允许访问共享资源,未获得到锁的线程只能在临界区进行排队等待,试想如果有1000个线程同时访问共享资源,那么最后一个线程必须要等前面999个线程执行完后才能够进入监界区操作共享资源。
                 如果锁没有控制好,非常容易出现程序整体性能低下的情况。

猜你喜欢

转载自maozhr520.iteye.com/blog/2385161