本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Java中的NIO,BIO,AIO分别是什么?
NIO
同步非阻塞,服务器实现模式为一个请求一个线程,即客服端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如连天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
BIO
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的请求开销,当然可以通过线程池机制改善。BIO方式适用于连接于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
AIO
异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了在通知服务器应用区启动线程进行处理,AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,变成比较负责,JDK7开始支持。
线程同步于阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
同步是个过程,阻塞是线程的一种状态。
多个线程操作共享变量时可能会出现竞争,这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先入的线程走出临界区。
线程同步不一定发生阻塞。线程同步的时候,需要协调推进速度,互相等待和互相唤醒会发生阻塞。
阻塞不一定同步。
同步和异步的区别?
同步交互: ☞发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待的过程。
异步交互: ☞发送一个请求,不需要等待返回,随时可以在发送下一个请求,即不需要等待。
区别: 一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要的等待异步交互方式。
今日的三道题结束啦。 祝你每日进步加油。