1. Reactor和Proactor模式的主要区别
Reactor和Proactor模式的主要区别是真正的读取和写入操作,是由谁来完成的。
Reactor:应用程序自己读取或者写入数据。(应用程序完成)
Proactor:应用程序不需要进行实际的读写过程,只需要从缓存区读取或者写入即可。内核会读取缓存区或者写入缓存区到真正的IO设备。(内核完成)
2. 同步和异步,阻塞和非阻塞
同步和异步是针对内核来说的
阻塞和非阻塞是针对应用程序来说的
2.1 所谓阻塞 I/O,是指应用程序在执行 I/O 操作后,如果没有获得响应,就会阻塞当前线程,不能执行其他任务。
2.2 所谓非阻塞 I/O,是指应用程序在执行 I/O 操作后,不会阻塞当前的线程,可以继续执行其他的任务。
2.3 所谓同步 I/O,是指收到 I/O 请求后,系统不会立刻响应应用程序;等到处理完成,系统才会通过系统调用的方式,
告诉应用程序 I/O 结果。
2.4 所谓异步 I/O,是指收到 I/O 请求后,系统会先告诉应用程序 I/O 请求已经收到,随后再去异步处理;等处理完成后,系统再通过事件通知的方式,告诉应用程序结果。
3. TCP socket通信
服务器端流程如下:
(1)创建serverSocket
(2)初始化 serverAddr(服务器地址)
(3)将socket和serverAddr 绑定 bind
(4)开始监听 listen
(5)进入while循环,不断的accept接入的客户端socket,进行读写操作write和read
(6)关闭serverSocket
客户端流程:
(1) 创建clientSocket
(2) 初始化 serverAddr
(3) 链接到服务器 connect
(4) 利用write和read 进行读写操作
(5) 关闭clientSocket