操作系统常见面试题(网络IO模型篇)(四)

1、reactor模型有哪三种类型?

单Reactor单线程(一个前台一个服务员)
单Reactor多线程(一个前台多个服务员)
主从Reactor多线程(多个前台多个服务员)

2、reactor模型有哪三种角色?

模型主要分为三个角色 :
Reactor:把IO事件分配给对应的handler处理
Acceptor:处理客户端连接事件
Handler:处理非阻塞的任务

3、传统IO模型的不足和解决思路是什么?

不足:
• 每个连接都需要独立线程处理,当并发数大时,创建线程数多,占用资源;
• 采用阻塞IO模型,连接建立后,若当前线程没有数据可读,线程会阻塞在读操作上,造成资源浪费

解决思路:
基于池化思想,避免为每个连接创建线程,连接完成后将业务处理交给线程池处理;
• 基于IO复用模型,多个连接共用同一个阻塞对象,不用等待所有的连接。遍历到有新数据可以处理时,操作系统会通知程序,线程跳出阻塞状态,进行业务逻辑处理。

4、Tomcat的四种IO模型?

NIO(tomcat8之后默认)
BIO(tomcat7之前默认)
APR
AIO(NIO2,tomcat8之后支持)

5、多路复用IO模型和Reactor模型的区别?

后者基于前者。

6、Reactor和Proactor  IO模型的区别?

1. Reactor基于多路复用IO模型;Proactor基于异步IO模型
2. Reactor是:事件来了操作系统通知应用进程,让应用进程来处理;
    Proactor是:事件来了操作系统来处理,处理完再通知应用进程(被动接受)

7、BIO、NIO和多路复用IO的区别?

BIO(挂起)和NIO(轮询)是主动从内核取数据;
多路复用IO的轮询(轮询内核准备数据情况)不是由用户进程做的,而是由select/poll/epoll做的。

8、进程切换的过程?

• 保存处理机上下文,包括程序计数器和其他寄存器。
• 更新PCB信息。
• 把进程的PCB移入相应阻塞队列。
• 选择另一个进程执行,并更新其PCB。
• 更新内存管理的数据结构。
• 恢复处理机上下文。

9、用户进程如何从网络IO读取数据?

• 网络数据分组到达后,会被复制到内核到某个缓冲区;
• OS内核把数据从内核缓冲区(内核空间)复制到进程缓冲区(用户空间);

提示:应用程序不能直接和硬件互操作,必须借助于操作系统

10、nginx和apache的区别?

nginx是基于事件模型(epoll),适合于IO密集型任务,比如反向代理。
apache是基于多进程/多线程模式的,适合于运行长时间计算任务的任务。


#学习路径##Java#
全部评论

相关推荐

点赞 评论 收藏
分享
10-13 20:24
河海大学 Java
点赞 评论 收藏
分享
评论
1
26
分享
牛客网
牛客企业服务