java NIO的非阻塞问题!

java NIO的非阻塞问题!,第1张

OIO是读写阻塞, NIO是读写非阻塞,就是说服务器等待客户端连接这块都是阻塞的, 一旦建立连接了, OIO下, 我读取客户端发来的信息会因网络延时问题又一次阻塞, 你发消息时也是一样 而NIO下, 你的selector.select()如果注册了read或者write, 当消息到达服务端时, 人家从阻塞中醒来提醒你,换句话说, 不是说阻塞消失了, 而是你想多处阻塞等待还是一处阻塞, 然后你干别的事, 数据来了通知你. 如果有兴趣你还可以了解下AIO, 一样有阻塞, 不过很多事 *** 作系统帮你归口做了而已, 与NIO的区别就是, NIO是数据到了提醒你读, AIO是数据读成功了提醒你一切都好. 总之, 这三种java都可支持, 都存在阻塞, 总的区别就是你在这件事上担当的角色不同

Java NIO 是一种非阻塞式I/O。

要理解 NIO,要先理解 非阻塞式I/O。

非阻塞式I/O 只是众多 IO 模型中的一种。

要透切理解 非阻塞式I/O,就要理解众多 IO 模型的历史和优劣。

要理解为什么会出现 这么多 IO 模型。

就要理解 计算机的 IO 系统和 *** 作系统如何处理 IO的。

1.非阻塞算法

非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 —— 例如比较和交换。非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞吐率,对生存问题(例如死锁和优先级反转)也能提供更好的防御。使用底层的原子化机器指令取代锁,比如比较并交换(CAS,compare-and-swap).

2.悲观技术

独占锁是一种悲观的技术.它假设最坏的情况发生(如果不加锁,其它线程会破坏对象状态),即使没有发生最坏的情况,仍然用锁保护对象状态.

3.乐观技术

依赖冲突监测.先更新,如果监测发生冲突发生,则放弃更新后重试,否则更新成功.现在处理器都有原子化的读-改-写指令,比如比较并交换(CAS,compare-and-swap).

4.CAS *** 作

CAS有3个 *** 作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。CAS典型使用模式是:首先从V中读取A,并根据A计算新值B,然后再通过CAS以原子方式将V中的值由A变成B(只要在这期间没有任何线程将V的值修改为其他值)。

清单 3. 说明比较并交换的行为(而不是性能)的代码

public class SimulatedCAS {

private int value

public synchronized int getValue() { return value}

public synchronized int compareAndSwap(int expectedValue, int newValue) {

int oldValue = value

if (value == expectedValue)

value = newValue

return oldValue

}

}

清单 4. 使用比较并交换实现计数器

public class CasCounter {

private SimulatedCAS value

public int getValue() {

return value.getValue()

}

public int increment() {

int oldValue = value.getValue()

while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)

oldValue = value.getValue()

return oldValue + 1

}

}

5.原子变量

原子变量支持不用锁保护就能原子性更新 *** 作,其底层用CAS实现。共有12个原子变量,可分为4组:标量类、更新器类、数组类以及复合变量类。最常用的原子变量就是标量类:AtomicInteger、AtomicLong、AtomicBoolean以及AtomicReference。所有类型都支持CAS。

6.性能比较:锁与原子变量

在中低程度的竞争下,原子变量能提供很高的可伸缩性,原子变量性能超过锁;而在高强度的竞争下,锁能够更有效地避免竞争,锁的性能将超过原子变量的性能。但在更真实的实际情况中,原子变量的性能将超过锁的性能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6717623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存