Socket编程 | TCP服务器IO模型之非阻塞轮询-4

1. 引言

前面的文章已经讲了如何搭建一个多线程/多进程的服务器模型,可以支持多个客户端同时连接服务器, 本篇来实现一种单进程的非阻塞轮询机制的服务器模型。

之前文章连接:

Socket编程 | TCP编程基本流程和API详解-1

Socket编程 | TCP服务端阻塞IO模型(多线程)-2

Socket编程 | TCP服务器IO模型之并发阻塞(多进程实现)-3

2. 概念理解

之前多线程/多进程服务器模型都是基于阻塞IO的机制实现的,本次测试以非阻塞IO为基础,服务端轮询的检测客户端的连接,关于阻塞与非阻塞的概念解释如下:

2.1 阻塞I/O模型:

进程会一直阻塞,直到数据拷贝完成。

应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。

当调用recv()/read()函数时,系统首先查是否有准备好的数据。如果数据没有准备好,那么系统就处于等待状态。当数据准备好后,将数据从系统缓冲区复制到用户空间,然后该函数返回。

当使用socket()函数创建套接字时,默认的套接字都是阻塞的。并不是所有 Sockets API以阻塞套接字为参数调用都会发生阻塞。例如,以阻塞

猜你喜欢

转载自blog.csdn.net/weixin_40209493/article/details/129183607
今日推荐