同步:多线程并发访问共享数据时,保证共享数据再同一时刻只被一个或一些线程使用安全
阻塞:就是read时,内核缓冲区中必须有数据,若是没有数据那么就一直等待多线程
非阻塞:就是read时,内核缓冲区中若是没有数据,也能够马上返回,errno为EGAIN,下一次再进行读取便可。并发
实例:AtomicInteger性能
public final int getAndAddInt(Object var1, long var2, int var4) { int var5; do { var5 = this.getIntVolatile(var1, var2); } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); return var5; }
阻塞同步和非阻塞同步都是实现线程安全的两个保障手段,非阻塞同步对于阻塞同步而言主要解决了阻塞同步中线程阻塞和唤醒带来的性能问题,那什么叫作非阻塞同步呢?在并发环境下,某个线程对共享变量先进行操做,若是没有其余线程争用共享数据那操做就成功;若是存在数据的争用冲突,那就才去补偿措施,好比不断的重试机制,直到成功为止,由于这种乐观的并发策略不须要把线程挂起,也就把这种同步操做称为非阻塞同步(操做和冲突检测具有原子性)。在硬件指令集的发展驱动下,使得 "操做和冲突检测" 这种看起来须要屡次操做的行为只须要一条处理器指令即可以完成,这些指令中就包括很是著名的CAS指令(Compare-And-Swap比较并交换)。
this
简单来讲,就是若是比较后若是返回成功,就返回结果;执行后若是比较失败,就再来一次。spa