尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Reactor反应堆
在 Linux 环境中,reactor 指的是一种基于 I/O 多路复用的事件驱动设计模式,其核心思想是通过一个专门的组件(反应器)监听多个 I/O 事件(如网络连接、数据读写等),当事件发生时触发对应的回调函数进行处理,从而让单个进程或线程能高效处理大量并发连接,避免传统阻塞 I/O 中因等待而造成的资源浪费。它通常依赖 Linux 的 select、poll 或 epoll 等系统调用来实现事件监听,常见于高性能网络服务器开发,比如通过 libevent、libev 等库来快速构建基于 reactor 模式的应用,以应对高并发场景下的 I/O 处理需求。在多进程线程中,write更简单。LT:只要可写就持续通知,有剩余空间ET:仅在缓冲区从满变为不满时通知一次把一个sockfd托管给select,poll,epoll原因是因为sockfd上事件没有就绪,用托管来提高效率。默认sockfd新建的情况下,读事件默认不是就绪的,因为输入缓冲区没有数据,所以默认添加epoll。而写事件是就绪的,因为输出缓冲区本来就有空间,所以,在前期,我们可以直接写,但是到了后期输出缓冲区可能会满,那时才需要epoll监听。对于写,我们直接发,发送条件不满足,开启写事件关心,后续剩余的数据,epoll会协助我自动进行发送。补充细节:1.如果我们开头直接对一个sockfd设置写关心,epoll就会立即就绪。2.未来我全部发完了,就要对关闭这个fd写事件关心3.如果写缓冲区没满,数据也发完了,我们就不用开启对写事件关心。4.直接发,我怎么知道写入条件不满足了呢,errno是EAGAIN即可。所以,对写事件关心最好是ET非阻塞。LT阻塞根本发挥不了作用,LT非阻塞与ET差不多。以上是用单进程+epoll+非阻塞实现的,下面是加入多线程和多进程的思路。主reactor线程+工作者线程池#include sys/epoll.h #include pthread.h #include fcntl.h #include unistd.h // 线程安全的任务队列 struct task_queue_t { // ... 使用互斥锁(pthread_mutex_t)和条件变量(pthread_cond_t)实现 }; void* reactor_thread(void* arg) { int epoll_fd = epoll_create1(0); int listen_fd; // 已初始化的监听socket struct epoll_event event, events[MAX_EVENTS]; // 将listen_fd加入epoll event.events = EPOLLIN; event.data.fd = listen_fd; epoll_ctl(epoll_fd, EPOLL_CTL_ADD, listen_fd, event); while (1) { int nfds = epoll_wait(epoll_fd, events, MAX_EVENTS, -1); for (int i = 0; i nfds; ++i) { if (events[i].data.fd == listen_fd) { // 处理新连接 int conn_fd = accept4(listen_fd, NULL, NULL, SOCK_NONBLOCK); event.events = EPOLLIN | EPOLLET; // 边缘触发模式 event.data.fd = conn_fd; epoll_ctl(epoll_fd, EPOLL_CTL_ADD, conn_fd, event); } else if (events[i].events EPOLLIN) { // 数据可读 int conn_fd = events[i].data.fd; char buffer[BUFFER_SIZE]; ssize_t count = read(conn_fd, buffer, BUFFER_SIZE); if (count 0) { // 封装任务,推送给工作者线程池 task_t* task = create_task(conn_fd, buffer, count); task_queue_push(global_task_queue, task); } } // ... 处理 EPOLLOUT, EPOLLHUP 等事件 } } } void* worker_threa
RELATED

相关推荐

GPT_Vuln-analyzer GEO-IP地理定位实战:一键查询IP归属地、ISP与时区信息

GPT_Vuln-analyzer GEO-IP地理定位实战:一键查询IP归属地、ISP与时区信息

GPT_Vuln-analyzer GEO-IP地理定位实战:一键查询IP归属地、ISP与时区信息 【免费下载链接】GPT_Vuln-analyzer Uses ChatGPT API, Bard API, and Llama2, Python-Nmap, DNS Recon, PCAP and JWT recon modules and uses the GPT3 model to create vulnerability rep…

📅 2026/10/25 17:13:00
【AI大模型】235B参数,119种语言,Qwen3却连“Strawberrrrry“都数不清?

【AI大模型】235B参数,119种语言,Qwen3却连“Strawberrrrry“都数不清?

介绍 终于,千呼万唤中,Qwen 3 登场了。 这次发布了2 个 MoE 模型,6 个 稠密(dense)模型,从 0.6B 到 235B,所有的尺寸都集全了。 它们最顶尖的模型 Qwen3-235B-A22B 在 benchmark 上的表现达到了…

📅 2026/10/11 20:29:40
【AI大模型】深入理解Token与分词器:Transformer学习的关键突破

【AI大模型】深入理解Token与分词器:Transformer学习的关键突破

前言 你有没有这样的困惑?看了大量关于 Transformer 和大语言模型(LLM)的资料,却依然感觉一头雾水?今天,让我们一起来聊一聊LLM 中的核心概念——Token。在学习 Transformer 的过程中,当真正理解…

📅 2026/11/13 20:59:55
MORE NEWS

更多资讯

📰

怎么考水电工证的,外省证能转过来吗?报名流程全解析

怎么考水电工证的,外省证能转过来吗?报名流程全解析 之前考的证在外省能不能转过来?这个问题,不少从事水电安装、维修、施工的同行都问过,特别是南阳的劳务班组负责人,经常遇到工人拿着外地的电工证,担心不能在当地使用。其实,国家早就有政策规定,…

📰

新疆电工证在哪里查询多少钱?学历不高也能报名的实操指南

新疆电工证在哪里查询多少钱?学历不高也能报名的实操指南 你是不是也担心自己学历不高,担心报名电工证会因为学历被拒?其实不然,新疆电工证的报考门槛并没有你想象的那么高,关键是要了解流程、准备材料,以及知道在哪里查询。本文将一步步告诉你【新疆电…

📰

电工证掉了只要有编号怎么补救?官方报名入口在这儿

电工证掉了只要有编号怎么补救?官方报名入口在这儿 怕考不过白交培训费,现在很多人拿着电工证掉了只要有编号的旧证来咨询,到底还能不能用?能不能补办?其实,这背后藏着不少人的焦虑,尤其是像你我这样的中小型施工企业负责人,手里握着十几个工种的证,…

📰

电工证多久能查 考在外省的证千万别踩坑

电工证多久能查 考在外省的证千万别踩坑 之前考的证在外省能不能转过来?这几乎是每个准备报考电工证的人心里最怕的问题。特别是像许昌这样的中小施工企业负责人,手里握着一堆证,但一到外地就发现“卡壳”, 千万别踩坑…

📰

电工证的其他用途你知道还能干啥吗?通过率揭秘

电工证的其他用途你知道还能干啥吗?通过率揭秘 之前考的证在外省能不能转过来?这个问题其实很多人都问过,特别是那些在外地打工、或者刚从学校毕业的应届生。你可能觉得电工证就是个上岗证,但它的用途可不止这些。今天咱们就聊聊电工证的其他用途,顺便揭…

📰

弱电有电工证吗保姆级教程:工地太忙根本没时间复习考试怎么办

弱电有电工证吗保姆级教程:工地太忙根本没时间复习考试怎么办 工地太忙根本没时间复习考试,你不是一个人。在河南鹤壁,很多从事弱电工程的工人也常遇到这个困惑:弱电有电工证吗?能不能用低压电工证去接活?这不仅关系到能否顺利接工程,还影响着你的职业…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬