day02 高并发性能优化,IO多路复用是关键因素吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3966个文字,预计阅读时间需要16分钟。
《C++高性能网络服务保级级教程+首发地址+day02+真正的高并发还得看IO多路复用+本次目标+使用epoll实现一个高并发的服务器+从单进程讲起+上一节从一个基础的socket服务说起,我们实现了一个简单的服务端程序。》
教程说明C++高性能网络服务保姆级教程
首发地址day02 真正的高并发还得看IO多路复用
本节目的使用epoll实现一个高并发的服务器
从单进程讲起上节从一个基础的socket服务说起我们实现了一个基本的socket服务器,并留了个思考题
先启动server,然后启动一个client,不输入数据,这个时候在另外一个终端上再启动一个client,并在第二个client终端中输入数据,会发生什么呢?
实际操作后,我们会发现,在第二个client输入后,服务端并没有响应,直到第一个client也输入数据完成交互后,第二个client才会有数据返回。
这是由于服务端accept获取到第一个client的套接字后,由于第一个client未输入数据,所以服务端进程会阻塞在等待客户端数据那一行。
...
int read_num = read(accept_fd, read_msg, 100);
...
所以,第二个client完成三次握手后,连接一直在服务端的全连接队列中,等待accept获取处理。
多线程,一个线程一个连接后续的client无法得到处理是由于服务端只有一个线程,获取client套接字还有连接通信全在一个线程中。
本文共计3966个文字,预计阅读时间需要16分钟。
《C++高性能网络服务保级级教程+首发地址+day02+真正的高并发还得看IO多路复用+本次目标+使用epoll实现一个高并发的服务器+从单进程讲起+上一节从一个基础的socket服务说起,我们实现了一个简单的服务端程序。》
教程说明C++高性能网络服务保姆级教程
首发地址day02 真正的高并发还得看IO多路复用
本节目的使用epoll实现一个高并发的服务器
从单进程讲起上节从一个基础的socket服务说起我们实现了一个基本的socket服务器,并留了个思考题
先启动server,然后启动一个client,不输入数据,这个时候在另外一个终端上再启动一个client,并在第二个client终端中输入数据,会发生什么呢?
实际操作后,我们会发现,在第二个client输入后,服务端并没有响应,直到第一个client也输入数据完成交互后,第二个client才会有数据返回。
这是由于服务端accept获取到第一个client的套接字后,由于第一个client未输入数据,所以服务端进程会阻塞在等待客户端数据那一行。
...
int read_num = read(accept_fd, read_msg, 100);
...
所以,第二个client完成三次握手后,连接一直在服务端的全连接队列中,等待accept获取处理。
多线程,一个线程一个连接后续的client无法得到处理是由于服务端只有一个线程,获取client套接字还有连接通信全在一个线程中。

