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个数才能让程序执行较好