线程池 / I/O复用 / 协程 简要备忘录
📅 2026/7/7 3:19:14
👁️ 次浏览
目录线程池Thread PoolI/O 复用I/O Multiplexing协程Coroutine一、线程池C实现思路核心结构示例代码简化线程池特点二、I/O 复用select / epoll示例多连接监听特点三、协程C语言模拟版本协程思想核心示例状态机版协程特点四、三者对比C实现视角五、最重要的系统级理解线程池Thread Pool解决如何高效管理“任务执行线程”预先创建线程任务来了就分配避免频繁创建/销毁线程适合CPU任务 / 业务处理I/O 复用I/O MultiplexingI/O复用解决一个线程如何管理多个连接用 select / epoll 监听多个 socket哪个有事件就处理哪个不阻塞等待协程Coroutine解决一个线程如何执行多个“可暂停任务”用户态调度遇到 IO 自动挂起恢复时继续执行适合高并发 IO如爬虫、服务端一、线程池C实现思路核心结构任务队列queueworker线程固定数量互斥锁 条件变量示例代码简化线程池#include pthread.h #include stdio.h #include stdlib.h #include unistd.h #define THREAD_NUM 3 #define TASK_NUM 10 typedef struct { int task_id; } task_t; task_t task_queue[TASK_NUM]; int task_count 0; pthread_mutex_t mutex; pthread_cond_t cond; void* worker(void* arg) { int id *(int*)arg; while (1) { pthread_mutex_lock(mutex); while (task_count 0) { pthread_cond_wait(cond, mutex); } task_t task task_queue[--task_count]; pthread_mutex_unlock(mutex); printf(线程 %d 处理任务 %d\n, id, task.task_id); sleep(1); } return NULL; } int main() { pthread_t threads[THREAD_NUM]; int ids[THREAD_NUM]; pthread_mutex_init(mutex, NULL); pthread_cond_init(cond, NULL); for (int i 0; i THREAD_NUM; i) { ids[i] i; pthread_create(threads[i], NULL, worker, ids[i]); } // 投递任务 for (int i 0; i TASK_NUM; i) { pthread_mutex_lock(mutex); task_queue[task_count].task_id i; pthread_mutex_unlock(mutex); pthread_cond_signal(cond); } sleep(10); return 0; }特点多线程并行线程复用适合 CPU/业务任务二、I/O 复用select / epollI/O复用这里用select版本最经典示例多连接监听#include stdio.h #include string.h #include unistd.h #include sys/select.h #include sys/socket.h #include arpa/inet.h int main() { int server_fd socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; addr.sin_family AF_INET; addr.sin_addr.s_addr INADDR_ANY; addr.sin_port htons(8080); bind(server_fd, (struct sockaddr*)addr, sizeof(addr)); listen(server_fd, 5); fd_set readfds; int max_fd server_fd; while (1) { FD_ZERO(readfds); FD_SET(server_fd, readfds); int ret select(max_fd 1, readfds, NULL, NULL, NULL); if (FD_ISSET(server_fd, readfds)) { int client_fd accept(server_fd, NULL, NULL); printf(新连接%d\n, client_fd); } } return 0; }特点单线程管理多个连接事件触发处理避免线程爆炸三、协程C语言模拟版本C语言没有原生协程但可以用setjmp / longjmp状态机或 ucontext已废弃但经典协程思想核心“函数可以暂停下次从上次位置继续”示例状态机版协程#include stdio.h typedef struct { int state; } coroutine_t; void task(coroutine_t* co) { switch (co-state) { case 0: printf(任务开始\n); co-state 1; return; case 1: printf(处理中...\n); co-state 2; return; case 2: printf(任务结束\n); co-state -1; return; } } int main() { coroutine_t co {0}; while (co.state ! -1) { task(co); } return 0; }特点单线程手动保存状态模拟“挂起/恢复”本质是用户态调度四、三者对比C实现视角模型核心机制是否多线程是否阻塞适用场景线程池pthread是可能阻塞CPU任务I/O复用select/epoll否不阻塞网络服务器协程状态机模拟否非阻塞高并发IO五、最重要的系统级理解一个现代服务器通常是epollI/O复用 线程池 协程思想例如nginxepoll 事件驱动redis单线程 IO复用Go runtime协程调度器
连读规则速查表
规则前一个词结尾后一个词开头连读方式示例(正常读法 → 连读)辅音元音辅音元音辅音"滑"到元音上,像拼成一个词not at all → /nɒ-tə-tɔːl/ pick it up → /pɪ-kɪ-tʌp/元音元音元音元音中间加一个滑音连接…
📅 2026/7/7 3:19:14
荨麻疹应该用什么,其实核心答案是:急性发作需遵医嘱使用抗过敏药物控制症状,日常缓解和预防复发可选择具有免疫调节作用的合规营养补充剂,通过均衡营养改善体质,降低过敏发作频率与不适程度。荨麻疹应该用什么…
📅 2026/7/7 3:19:14
在阿克苏创业经营,企业最需要的从来不是繁杂的财税套路,而是合规省心、透明靠谱、贴合本地政策的财税服务。从初创开店、注册公司,到日常记账报税、资质办理,再到企业扩张后的财税合规与风险把控,每一个环节都关系着企…
📅 2026/7/7 3:19:14
1. OpenClaw 多 Agent 配置不是“装个包就跑”,而是系统级协同工程很多人点开 OpenClaw 的 GitHub 主页,看到 README 里那句 “Multi-agent orchestration made simple”,心里一热:好家伙,多智能体协作终于有开箱即用的…
📅 2026/7/7 4:15:22
1. 项目概述:这不是“编队飞行”,而是水面无人艇的精密协同舞蹈“多无人艇无外部定位协同绕靶航行方法”——光看这个标题,很多人第一反应是:这不就是无人机编队飞个圈?但真干过水上无人系统的人会立刻皱眉:…
📅 2026/7/7 4:15:22
1. Trae 是什么?别被“AI 编程工具”标签带偏了取证场景的真实需求很多人第一次看到 “Trae” 这个名字,下意识会联想到 Cursor、GitHub Copilot 或 Claude Code —— 毕竟满屏的 “skills”、“superpower skills”、“Claude Code Skills” 热搜词&…
📅 2026/7/7 4:15:22
一种因子游戏
时间限制:1秒 空间限制:256M
网页链接
牛客tracker
牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日…
📅 2026/7/7 4:15:22
🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 今天来看一个在 ComfyUI 中实现单张图片一键生成3D模型的工作流方案。这个方案结合了腾讯混元3D、MV-Adapter和SDXL三大技术组件&…
📅 2026/7/7 4:15:22
一、评测引言随着国内企业全球化布局、数字化转型进程加速,境内外中英双语EMBA项目成为企业创始人、高层管理者进阶深造、拓宽全球视野、搭建高端人脉的核心选择。当前EMBA教育市场项目繁杂,内地985高校头部EMBA与境外优质双语EMBA各有办学特色ÿ…
📅 2026/7/7 4:13:21
CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…
📅 2026/7/7 0:00:45
B站评论删除API逆向工程实战:关键参数解析与自动化操作指南1. 理解B站评论删除机制的核心逻辑在视频平台内容管理中,评论删除功能涉及复杂的权限验证和数据交互流程。B站的评论删除API采用了一套基于Web安全标准的防护机制,主要依赖三个关键参…
📅 2026/7/7 0:00:45
1. 项目概述:为什么Java安全是红蓝对抗的焦点在当前的网络安全攻防演练,也就是我们常说的红蓝对抗中,Java应用一直是双方交锋的核心战场。这不仅仅是因为Java在企业级应用、金融系统和大型互联网后台中无处不在,更因为其技术栈的复…
📅 2026/7/7 0:00:45
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/6 10:35:30
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/6 6:10:21
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/6 5:35:58
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/6 6:10:28
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/6 6:10:26
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/5 23:45:08