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

河南住房城乡建设部网站郑州网络营销公司哪家好

河南住房城乡建设部网站,郑州网络营销公司哪家好,日本设计网站推荐,网站模板设计报价单【Linux】【网络】Reactor模式 1. Reactor 模式: Reactor 模式是一种事件驱动的设计模式,同步I/O通常用于设置Reactor 模式主线程(I/0处理单元,下同)只负责监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑…

【Linux】【网络】Reactor模式

1. Reactor 模式:

Reactor 模式是一种事件驱动的设计模式,同步I/O通常用于设置Reactor 模式主线程(I/0处理单元,下同)只负责监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元,下同)。除此之外,主线程不做任何其他实质性的工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。
在这里插入图片描述
使用同步 I/O模型(以epoll_wait() 为例)实现的 Reactor 模式的工作流程是:
1)主线程往
epoll内核事件表
中注册socket 上的读就绪事件。(主线程循环等待监听连接套接字上的事件)
2)主线程调用epoll_wait 等待socket 上有数据可读。
3)当socket上有数据可读时,epoll_wait() 通知主线程。主线程则将socket 可读事件放入请求队列
4)睡眠在请求队列上的某个工作线程被唤醒,它从socket读取数据,并处理客户请求然后往epoll内核事件表中注册该socket上的就绪事件。
5)主线程调用epoll_wait() 等待 socket 可写。
6)当socket 可写时,epoll_wait()通知主线程。主线程将socket可写事件放入请求队列
7)睡眠在请求队列上的某个工作线程被唤醒,它往socket上写入服务器处理客户请求的结果。

工作流程:
  1. 主线程(Reactor)负责监听和接收事件

    • Reactor 线程等待 I/O 事件的发生(例如 socket 上的可读或可写事件),并通过事件循环处理。
    • 它使用 I/O 多路复用机制(如 epollselect)来监听多个事件源(例如多个 socket)。
  2. 注册事件

    • 主线程将事件(例如可读、可写、连接请求等)注册到 I/O 多路复用器(如 epollselect)。
    • 当事件发生时,I/O 多路复用器会通知 Reactor 线程。
  3. 事件分发

    • Reactor 线程通过事件分发机制,将事件分发到相应的 事件处理器
    • 每个事件(如连接请求、数据可读、数据可写等)都有对应的回调函数,Reactor 会调用这些回调来处理事件。
  4. 事件处理

    • 回调函数通常由工作线程或主线程执行,处理 I/O 操作(例如读数据、写数据、关闭连接等)。
示例:

Reactor 模式通常通过主线程驱动的事件循环来实现,在 libevent 中可以通过 event_base 来实现这个事件循环。

#include <event2/event.h>
#include <stdio.h>void on_event(evutil_socket_t fd, short what, void *arg) {printf("Event triggered on fd %d\n", fd);// 可以在此执行具体的 I/O 操作,如读取数据、写数据等
}int main() {struct event_base *base = event_base_new();struct event *ev;evutil_socket_t fd = 0; // 标准输入文件描述符ev = event_new(base, fd, EV_READ | EV_PERSIST, on_event, NULL);event_add(ev, NULL);  // 将事件加入事件循环event_base_dispatch(base);  // 启动事件循环,等待事件发生并处理event_free(ev);event_base_free(base);return 0;
}

PS:

  • Libevent 的本质是基于 事件驱动 的,它通过一个单线程的事件循环来处理回调函数,避免了频繁的线程切换和上下文切换,提高了效率。回调函数是在主线程的栈区执行的,这样可以避免创建额外线程的开销。但是某个回调函数阻塞可能会导致程序阻塞。
  • 而 modu 库 在此基础上加入了线程池,这样可以将回调的执行交给多个线程来处理,进一步提升了并发处理能力,尤其是当回调函数的操作比较耗时,或需要大量并发时。线程池的引入能够更好地分摊负载,并且避免了主线程被阻塞的风险。

把libevent实现写完会写一下modu库

http://www.dtcms.com/wzjs/374398.html

相关文章:

  • 重庆网站排名公司网络营销的策略有哪些
  • 潍坊娜娜网站制作合肥新闻 今天 最新消息
  • 网站备案 个体工商户市场调研公司排名
  • 网站开发 百度网盘免费b站推广软件
  • 装饰公司怎样做网站莱阳seo排名
  • 建设征婚网站品牌公关具体要做些什么
  • 个人网站模板的优缺点建设网站公司
  • 做电影网站会被捉吗成都百度推广
  • 巩义网站建设案例介绍网络营销的短文
  • 网络运营与维护某网站seo诊断分析
  • 做网站添加mp3企业网站推广
  • 网站内容检测百度推广效果怎么样
  • 中小公司做网站云搜索
  • 怎么做网站的签约编辑注册城乡规划师含金量
  • 个人如何做问答类网站国外十大免费服务器和域名
  • 万达做的电商网站郑州企业网络推广外包
  • 网站页面描述怎么写贵阳做网络推广的公司
  • 英文网站建设seo网站推广多少钱
  • 三网合一网站建设计划流量精灵官网
  • 广州市建设工程安监站网站从事网络销售都有哪些平台呢
  • 找人做一个网站多少钱游戏推广员上班靠谱吗
  • 网站开发职业生涯规划书河北网站建设案例
  • 济南网站建设webwz8网上培训课程平台
  • vs网站制作教程关键词搜索引擎
  • 校园云网站建设网络宣传策划方案
  • 做网站的过程搜索引擎大全入口
  • 前端做数据表格的网站新东方烹饪培训学校
  • 一个数据库两个网站wordpress登陆b站视频推广网站400
  • 做外贸单网上都做的那些网站西安计算机培训机构哪个最好
  • 网站租服务器网络推广平台有哪些公司