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

Posted 小谢backup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统常见面试题(网络IO模型篇)(第四弹)相关的知识,希望对你有一定的参考价值。

欢迎关注我的技术公众号:小谢backup

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

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

 

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

模型主要分为三个角色 :

  1. Reactor:把IO事件分配给对应的handler处理
  2. Acceptor:处理客户端连接事件
  3. 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是基于多进程/多线程模式的,适合于运行长时间计算任务的任务。

以上是关于操作系统常见面试题(网络IO模型篇)(第四弹)的主要内容,如果未能解决你的问题,请参考以下文章

面试题操作系统常见面试题合集

面试题操作系统常见面试题合集

计算机研究生复试常见面试题——计算机网络部分

面试题Java基础篇-常见面试题总结p3

面试题Redis篇-常见面试题p1

面试题Redis篇-常见面试题p1