首页 > 试题广场 >

请你说说BIO、NIO、AIO

[问答题]
bio 阻塞io noi 非阻塞io aio 异步io
发表于 2022-05-24 17:43:03 回复(0)
BIO是阻塞IO,当用户线程发送请求后会一直阻塞知道内核将数据准备;NIO是非阻塞IO,用户线程发送请求后,可以做其他工作,并不断询问内核数据,但在数据复制阶段,用户线程依然属于阻塞状态。BIO和NIO都属于同步IO。AIO是异步IO,当用户线程发送请求后,内核会返回一个回调函数,但该回调函数不包含数据,之后用户线程可以去处理其他操作,当数据准备好后,内核会将数据发送给用户线程,而不必像同步IO中用户线程自己去读取。BIO只能处理一个请求,NIO可以处理多个请求。IO多路复用在NIO的基础上加入了事件机制,将用户请求注册到多路复用器上,然后监视是否有IO事件发生,如果有,会通知用户线程,IO多路复用的方式主要有select、poll、epoll。
编辑于 2022-08-10 10:27:42 回复(0)
BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理,如果连接多了,线程数量不够,就只能等待,即会发生阻塞。 NIO:同步非阻塞,服务实现模式为一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有IO请求就处理。 AIO:异步非阻塞,引入了异步通信,采用的是proactor模式,特点是:有效的请求才启动线程,先由操作系统完成再通知服务端。
发表于 2022-07-23 09:54:10 回复(0)
unix提供了五种IO模型:阻塞IO,非阻塞IO,IO多路复用,信号驱动IO,异步IO。BIO:对应的是阻塞IO,一次只能操作一个IO。NIO是IO多路复用,一个线程可以同时处理多个IO请求。IO多路复用模型提供select,poll,epoll调用。select调用的主要作用就是统计有多少个文件描述符处于就绪状态,但是支持的文件描述符的个数有限。poll调用和select几乎一样,但是其底层数据结构为链表,支持的文件描述符的个数无上限。epoll是更高效的调用,底层数据结构为红黑树和链表,避免了轮询和大量内存的分配。
发表于 2022-06-19 22:23:05 回复(1)
IO一般指BIO,即Blocking-IO同步阻塞IO;NIO,即Non-Blocking IO同步非阻塞IO,如Netty就使用了NIO;AIO,即Asychronized IO异步非阻塞IO。
发表于 2023-03-14 23:33:50 回复(0)
1.BIO(blocking I/O)是阻塞IO,当用户线程发送请求后会一直阻塞知道内核将数据准备;

2.NIO是非阻塞IO,用户线程发送请求后,可以做其他工作,并不断询问内核数据,但在数据复制阶段,用户线程依然属于阻塞状态。

3.BIO和NIO都属于同步IO。

4.AIO是异步IO,当用户线程发送请求后,内核会返回一个回调函数,但该回调函数不包含数据,之后用户线程可以去处理其他操作,当数据准备好后,内核会将数据发送给用户线程,而不必像同步IO中用户线程自己去读取。

5.BIO只能处理一个请求,NIO可以处理多个请求。IO多路复用在NIO的基础上加入了事件机制,将用户请求注册到多路复用器上,然后监视是否有IO事件发生,如果有,会通知用户线程,IO多路复用的方式主要有select、poll、epoll。

编辑于 2023-02-25 09:55:19 回复(0)
BIO(Blocking I/O,同步I/O): 特点:BIO是一种传统的I/O模型,它是阻塞的,也就是说当一个线程执行I/O操作时,它会一直等待直到数据准备好或操作完成。这意味着如果有多个客户端连接到服务器,每个客户端的请求都需要一个独立的线程来处理,因此BIO通常会导致线程资源的浪费。 适用场景:BIO适用于连接数较少且并发要求不高的情况,例如传统的Socket编程中。 NIO(Non-blocking I/O,同步非阻塞I/O): 特点:NIO引入了通道(Channel)和缓冲区(Buffer)的概念,允许一个线程管理多个通道,使得一个线程可以处理多个I/O操作。NIO是非阻塞的,通过轮询来检查是否有数据准备好,不会阻塞线程。NIO提供了Selector来实现多路复用,可以同时监听多个通道的事件。 适用场景:NIO适用于高并发、连接数多、但每个连接的I/O操作相对较短的情况,例如网络服务器和聊天服务器。 AIO(Asynchronous I/O,异步I/O): 特点:AIO是一种更高级别的I/O模型,它完全异步,不需要通过轮询来等待数据准备好。在AIO中,应用程序提交I/O操作后,可以继续执行其他任务,当I/O操作完成时,操作系统会通知应用程序。AIO通常用于处理连接数非常大且I/O操作可能长时间等待的情况,例如高性能的网络服务器。 适用场景:AIO适用于需要高度并发、低延迟且高吞吐量的应用,但它的使用比BIO和NIO更复杂。
发表于 2023-09-26 11:25:04 回复(1)
BIO、NIO、AIO、多路复用、信号驱动 阻塞IO:在读写的过程中会发生阻塞,用户线程发起IO请求,内核会看数据是否就位,如果没有就会阻塞住这个用户线程。 非阻塞IO:在读写的过程中不会阻塞,用户线程发起IO请求,如果数据没有就位,就会得到错误信息,然后可以不断的重复请求,直到数据就位,进入数据复制阶段。 BIO和NIO都属于同步IO。AIO是异步IO,当用户线程发送请求后,用户线程可以继续去做其他事情,当数据准备好后,内核会将数据发送给用户线程,而不必像同步IO中用户线程自己去读取。 多路复用:多路指的是多个socket连接,复用指的是单个进程、线程去处理这些连接,就是一个select函数,对文件描述符进行循环监听。
发表于 2022-12-27 13:23:53 回复(0)
bio即同步阻塞io,客户端发送的每一个请求服务端都要有有一个线程来处理,当请求过多时会造成线程数量不够造成阻塞。nio即同步非阻塞io,即一个线程可以处理多个请求,客户端发送的请求会注册到多路复用上,有io请求就处理。AIO,即异步非阻塞加载,有效的请求才启动线程,先由操作系统完成再通知服务端
发表于 2023-08-14 08:46:05 回复(0)
47
发表于 2023-03-05 13:52:19 回复(0)
BIO、NIO、AIO、多路复用、信号驱动 阻塞IO:在读写的过程中会发生阻塞,用户线程发起IO请求,内核会看数据是否就位,如果没有就会阻塞住这个用户线程。 非阻塞IO:在读写的过程中不会阻塞,用户线程发起IO请求,如果数据没有就位,就会得到错误信息,然后可以不断的重复请求,直到数据就位,进入数据复制阶段。 BIO和NIO都属于同步IO。AIO是异步IO,当用户线程发送请求后,用户线程可以继续去做其他事情,当数据准备好后,内核会将数据发送给用户线程,而不必像同步IO中用户线程自己去读取。 多路复用:多路指的是多个socket连接,复用指的是单个进程、线程去处理这些连接,就是一个select函数,对文件描述符进行循环监听
发表于 2024-05-26 00:56:38 回复(0)
阻塞IO,非阻塞IO,async io
发表于 2024-05-25 15:57:47 回复(0)
BIO 同步阻塞IO,NIO同步非阻塞IO,AIO同步非阻塞IO
发表于 2024-04-03 13:18:22 回复(0)
BIO 是阻塞IO,当用户发送请求后会一直阻塞直到内核将数据准备 NIO 是非阻塞IO,当用户发送请求后不会一直阻塞,可以做别的事情,并不断的询问内核数据,但在数据复制阶段,用户线程依然属于阻塞状态。BIO和NIO都属于是同步IO。 AIO 是异步IO,当用户发送请求后,内核会返回一个回调函数,但是函数不包含任何的数据,用户可以去处理其他的操作,当数据准备好以后,内核会将数据发送给用户线程,不用自己去读取。 而IO多路复用是在NIO的基础上加上事件机制,将用户请求注册到多路复用器,监视是否有IO事件发生,如果有则通知用户线程,而IO多路复用的方式有select,poll,epoll
编辑于 2024-04-02 16:28:55 回复(0)
bio是阻塞式io,NIO是非阻塞式io,AIO是异步式io
编辑于 2024-03-30 23:29:58 回复(0)
BIO和NIO属于同步IO AIO属于异步IO BIO:阻塞IO模型 当用户线程发送一个请求后一直阻塞直到内核将数据准备好,只能处理一个请求 NIO:非阻塞IO模型 用户线程发送请求后,可以做其他工作,且不断询问内核数据,但是在数据获取阶段,用户线程依然是阻塞状态 可以处理多个请求 AIO:异步IO模型 当用户线程发送请求后,内核会返回一个回调函数,用户线程不需要自己主动的去查询数据是否准备好,而是内核在数据准备好后通知用户线程 IO多路复用在NIO基础上加入事件机制,将用户请求注册到多路复用器,监视是否有IO事件发生,如果有,则通知用户线程 IO多路复用的方式:select、poll、epoll
编辑于 2024-03-16 11:28:27 回复(0)
编辑于 2024-03-08 10:12:26 回复(0)
BIO 是阻塞IO 线程必须等待当前处理完成过后才可以做其他的 NIO是非阻塞 线程发起请求后 可以做其他的工作 AIO是异步IO BIO和NIO都是同步
编辑于 2024-03-05 18:04:22 回复(0)
BIO同步阻塞io,相当于一个线程干完活了,你要等其他线程一起干完活,在这里阻塞着,并且你啥也不能干,直到大家一起干完活。NIO同步非阻塞IO,相当于一个线程干完活了,你不必等其他线程也干完,你可以先干着别的,等其他线程干完活后通知你就可以进行下一步了。AIO异步非阻塞,相当于一个线程干完活后,你不需要等待其他线程也干完这个活,你就可以去进行下一步了
发表于 2024-01-01 17:56:15 回复(0)
bio 阻塞io nio 多路复用io aio 异步io io 可以区分为阻塞。非阻塞 当应用发起请求时候,有两个过程 等待响应,内核空间复制到用户空间 多路复用 具体实现 select poll epoll. 目前使用的epoll select有局限性,它自己管理 fdset ,每次都需要 copy到内核空间,而且大小有限制,poll 请求数变大了, epoll 不需要每次都copy,内部是红黑树,并且不需要一直去访问 某个请求是否有数据,
发表于 2023-11-29 16:23:41 回复(0)