当前位置: 首页 > news >正文

电子商务网站建设研究关于华大18年专注seo服务网站制作应用开发

电子商务网站建设研究,关于华大18年专注seo服务网站制作应用开发,机械加工网报价,wordpress搜索不到插件IO多路复用是一种高效的I/O处理方式,它允许单个进程能够同时监视多个文件描述符(sockets、文件等),并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作,以提…


        IO多路复用是一种高效的I/O处理方式,它允许单个进程能够同时监视多个文件描述符(sockets、文件等),并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作,以提高系统的性能和响应速度

一、概念


1. IO多路复用的核心

        文件描述符集合:使用一个数据结构(如数组或位图)来管理多个文件描述符,通常使用select、poll或epoll等系统调用来监视这些文件描述符。

        阻塞与非阻塞:IO多路复用可以与阻塞和非阻塞I/O一起使用。非阻塞I/O允许程序立即返回,而不必等待数据准备好。

        事件驱动:当一个或多个文件描述符准备好进行读取或写入操作时,IO多路复用会触发相应的事件,从而通知应用程序执行相应的操作。

        单线程/多线程:IO多路复用可以由单个线程或多个线程来处理,取决于应用程序的需求。通常,单个线程可以管理多个文件描述符。

2. 四种IO模型

阻塞IO模型(Blocking IO)

        ① 阻塞IO模型是最简单的IO模型之一;
        ② 当程序执行IO操作时,它会被阻塞,直到IO操作完成为止;
        ③ 这种模型的效率较低,因为程序在等待IO完成期间无法执行其他任务。


非阻塞IO模型(Non-blocking IO)

        ① 非阻塞IO模型允许程序在等待IO完成时继续执行其他任务;
        ② 当程序请求IO操作时,它会立即返回,不会被阻塞;
        ③ 程序需要不断轮询以检查IO操作是否完成,这可能会导致CPU资源浪费。


多路复用IO模型(IO Multiplexing)

        ① 多路复用IO模型使用了一种机制,允许程序同时等待多个IO操作的完成;
        ② 通常使用select、poll或epoll等系统调用来实现;
        ③ 程序可以同时监视多个文件描述符,只有当其中某个文件描述符有IO事件发生时,程序才会被唤醒处理该事件。


异步IO模型(Asynchronous IO)

        ① 异步IO模型中,程序发起IO操作后立即返回,不会阻塞;
        ② 当IO操作完成时,系统会通知程序,然后程序处理完成的数据;
        ③ 这种模型的效率很高,因为程序不需要轮询,但实现复杂度较高。

        因此IO复用的核心基本思想为:先构造一张有关描述符的表,然后调用一个函数。当这些文件描述符中的一个或多个已准备好进行I/O时函数才返回。函数返回时告诉进程哪些描述符已就绪,可以进行I/O操作。

3. IO复用的优点

  • 高效利用CPU:相较于传统的多线程/多进程模型,IO多路复用可以减少线程/进程的创建和切换开销,提高CPU的利用率。

  • 减少资源占用:减少了每个连接的资源消耗,因为不再需要为每个连接创建一个线程或进程。

  • 简化程序逻辑:IO多路复用可以简化程序的逻辑,使得代码更易于维护和理解。

二、代码实现(TCP服务器端为例)

1. 创建监听套接字socket

	// 创建套接字socketint ser_socket = socket(AF_INET, SOCK_STREAM, 0);if (ser_socket == -1){perror("socket");return -1;}int reuse = 1;//设置套接字属性,  SO_REUSEADDR 允许端口重用 if(setsockopt(ser_socket, SOL_SOCKET, SO_REUSEADDR, (void *)&reuse, sizeof(reuse))<0){perror("setsockopt error");return -1;}


2. 初始化套接字和服务器自己的IP地址结构体(包括端口号)

// 初始化地址结构体 // IP地址+PORT端口号struct sockaddr_in addr;addr.sin_family = AF_INET;   						//地址簇addr.sin_port = atoi(argv[1]);								//端口(一般以传参的传进来)// addr.sin_addr.s_addr = inet_addr("192.168.1.25");	//IP地址addr.sin_addr.s_addr = htonl(INADDR_ANY);			//用特殊的"0.0.0.0"这个IP来绑定本机IP地址


3. 绑定bind

// 绑定地址结构体bindint b = bind(ser_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));if(b == -1){perror("bind");return -1;}printf("绑定成功\n");


4. 开启监听listen

int l = listen(ser_socket, 3);if (l == -1){perror("listen");return -1;}printf("监听成功\n");//ser_socket由 待链接套接字 变成 监听套接字


5. 创建文件描述符集合,并初始化

        这里呢设置了套接字超时,就是在规定的时间内如果没有客户端连接,则退出服务器。

//设置套接字接收超时struct timeval tv;tv.tv_sec = 5; //超时秒数tv.tv_usec = 0;setsockopt(ser_socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); // 等待连接acceptstruct sockaddr_in c_addr;		//用来存放客户端链接成功之后的IP加端口int addrlen = sizeof(c_addr);int new_socekt = accept(ser_socket, (struct sockaddr *)&c_addr, &addrlen);if (new_socekt == -1){printf("延时时间到了,服务器退出了\n");perror("accept");return -1;}// new_socekt 链接成功之后,用来通信的套接字printf("客户端【%s】【%u】连接成功\n", inet_ntoa(c_addr.sin_addr), c_addr.sin_port);//客户端的IP跟端口,IP是你客户端本身自带的,但是端口是系统随机分配的啊// 接收消息read/recvchar buf[1024];while(1){bzero(buf, sizeof(buf));read(new_socekt, buf, sizeof(buf));// recv(new_socekt, buf, sizeof(buf), 0);printf(" client %s\n", buf);}


6. 资源释放,关闭套接字

close(new_socekt);// shutdown(new_socekt, SHUT_RDWR);

三、使用场景


       1. 网络服务器: IO复用常用于网络服务器,特别是需要同时处理大量客户端连接的情况,例如Web服务器、聊天服务器和在线游戏服务器。

       2. 网络代理: 代理服务器需要同时监听多个客户端和服务器连接,以便在它们之间传递数据,这是IO复用的典型应用场景。

        3. 聊天应用: 实时聊天应用通常需要处理多个客户端的消息,IO复用可以用于同时监视多个客户端连接,以便实时传递消息。

        4. 文件传输应用: 文件传输服务器需要同时处理多个文件上传或下载请求,使用IO复用可以有效管理这些请求。

        更多C/C++语言、Linux系统、数据结构和ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉
http://www.rdtb.cn/news/22661.html

相关文章:

  • 南宁网站建设速成培训百度信息流广告
  • 政府网站开发报价如何优化关键词搜索排名
  • 无锡公司网站设计网络营销推广公司有哪些
  • 淄博做淘宝网站百度优化排名
  • 微网站管理成都seo专家
  • 小型网站建设实训教程苏州网络推广seo服务
  • 云网站建设什么是外链
  • 做贱奴网站网站搜索引擎推广
  • 厦门建设网站哪家好网建
  • 企业网站开发的感想分析影响网站排名的因素
  • 成都公司建设网站怎么建立自己的网页
  • 中国开头的网站怎么做ip域名查询
  • 做网站对程序员说那些需求产品推广方案怎么写
  • 可以和外国人做朋友的网站百度官方网站下载安装
  • 长沙公司网站费用建网站流程
  • 厦门市建设执业资格注册管理中心网站长春网站建设开发
  • 自制网站要钱吗新产品怎样推广
  • 基层党组织标准化建设网站如何开通网站
  • 软件技术发展前景与趋势优化网站排名工具
  • 做暖视频网站免费大连seo顾问
  • wordpress网站搭建教程seo是什么的
  • 网络管理系统页面关键词优化推广策略
  • html下载网站模板游戏网站交换友情链接
  • 高校网站建设要点如何把一个关键词优化到首页
  • 南京市雨花区建设局网站营销顾问公司
  • 漳州做网站多少钱java培训机构十强
  • seo查询在线潮州seo建站
  • 佛山网站建设怎么做设计网站用什么软件
  • wordpress安装百度站长资源平台北京网站seo优化推广
  • 未来的软件开发方向是什么seo搜索引擎优化实训报告