• Java 多线程分析 (四) ---高并发基础知识)


    1.原子量级操作(读、++操作、写分为最小的操作量单位,在多线程中进行原子量级编程保证程序可见性(有序性人为规定))

    由于某些问题在多线程条件下:产生了竞争的问题,(例如:在多线程中一个简单的计数器增加)如果在程序中不采用同步的机制,那么在程序的运行结果中,多个线程在访问此资源时候,产生Racing。解决这个问题,采用某种方式阻止其他线程在该线程使用该变量的时候使用该变量

    采用原子级操作:1.采用加锁的机制(最好的操作)2.Java.concurrent.atomic包包含一些原子量操作:AtomicLong类,虽然采用Atomic包中原子量操作,在这些个简单的可以保证结果运行的正确性,但是也有其缺陷型:

    I.当多线程中,如果从一个无状态的类中添加一个状态,此时该类由线程的安全性对象管理,采用Atomic包(叫做线程安全方式)计算,得到一个好的结果

    II.当状态由一个增加到多个状态,并且这多个变量之间不是相互独立,有一定的联系,并且同时对一个资源进行访问,此时不要用atomic类,采用锁的概念

    2.Java高并发编程:(只是简单知识的理解,jdk1.5新版本中原子量,线程安全,)在图像处理和服务器端(数据挖掘)的编程,CPU主频4GHZ

    I.CPU并行(网络编程,服务器端使用),HTTP服务器

    1.同步与异步:同步调用过程调用之后会有等待响应再返回(synchronized)中之前见过同步机制,异步指在调用之后直接返回,在执行其他事情在其他线程中

     

     1.并行 Vs 并发:单个CPU不肯能并行(采用并发),多个CPU可能并行运行

    2.临界区:

    3.阻塞Vs 非阻塞 

    阻塞代价:花8万多个时钟处理某件事情(有肯能出现死锁情况)

    死锁:(阻塞)相当于静态问题,CPU占用率为0;

    活锁:(电梯遇人,两个人不停遇面),CPU有占用率,资源多个线程解锁和占用

    Starvation:本身优先级太低,数据竞争中被高优先级线程使用,自己无法得到

    阻塞是一种悲观操作,认为资源只能被一个人占用(进入临界区),非阻塞:一种积极操作,遵守宽进严出。

    无锁必须无障碍,无锁在竞争中有一个线程能够胜出,无等待必须无锁

    5.并行2个定律:

    在程序中F很大,加CPU个数影响不是很大

     

    GUustafston定律:只是F串行比例小的条件下,才有高的性能

    综上所述:只有调节程序中串行话的比例,同时处理CPU个数才能让程序执行较好

  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/5786813.html
Copyright © 2020-2023  润新知