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

Linux网络编程实战:手把手教你写一个多线程并发服务器

在网络编程中,如何高效处理多个客户端的并发连接是一个核心问题。相比于多进程模型(Process-based),多线程模型(Thread-based)具有资源消耗更小、上下文切换更快的优势。

本文将基于课堂笔记,详细讲解如何将一个单进程的阻塞服务器改造为多线程并发服务器。我们将重点解决线程参数传递中的“内存竞争”问题,并实现自动的资源回收。

一、 设计思路

1. 模型架构

  • 主线程(Main Thread):只负责监听连接。循环调用accept(),一旦有客户端连接成功,就创建一个新的子线程。
  • 子线程(Child Thread):负责具体的业务通信。读取客户端数据,处理后回写。

2. 关键技术点

  • 线程分离(pthread_detach):主线程处于while(1)循环中,无法调用pthread_join阻塞回收子线程资源。因此,必须在子线程创建后立即设置为分离状态,让操作系统在线程结束时自动回收资源。
  • 参数传递策略:这是本篇的难点。
    • 错误做法:直接传递cfd的地址。因为主线程循环很快,可能在子线程读取该地址前,主线程已经修改了该地址的内容(接受了新连接),导致多个线程操作同一个文件描述符。
    • 正确做法:定义一个结构体数组。为每个连接分配独立的存储空间(存放 fd 和 IP/Port 信息),将该结构体的指针传递给子线程。

二、 核心代码实现

我们需要定义一个结构体SockInfo来封装通信所需的数据,并创建一个全局数组来管理这些结构体。

1. 数据结构定义

// 定义最大连接数#defineMAX1024// 自定义结构体:存储文件描述符和客户端地址信息structSockInfo{intfd;// 通信文件描述符structsockaddr_inaddr;// 客户端地址信息pthread_ttid;// 线程ID (可选)};// 全局数组,用于存储每个子线程的连接信息structSockInfoinfos[MAX];

2. 完整代码示例 (server_thread.c)

#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<arpa/inet.h>#include<pthread.h>#include<errno.h>#defineMAX1024#definePORT9999// 结构体定义structSockInfo{intfd;structsockaddr_inaddr;};// 全局数组structSockInfoinfos[MAX];// 子线程工作函数void*worker(void*arg){// 1. 将参数强转回结构体指针structSockInfo*pinfo=(
http://www.jsqmd.com/news/328356/

相关文章:

  • 2026年口碑好的设计师集成阻尼铰链/静音集成阻尼铰链TOP实力厂家推荐榜
  • Linux网络编程踩坑:多线程并发服务器中文件描述符的正确传递方式
  • 社交媒体内容管理工具深度评测:douyin-downloader技术原理与实战优化
  • 2026年口碑好的电加热炉/红外节能加热炉厂家推荐及选购指南
  • Windows蓝牙优化工具与AirPods跨平台适配技术解析
  • 2026河南工业机器人培训市场深度解析与机构优选指南
  • [解决方案] 抖音视频批量下载系统设计与实现:从需求分析到资源调度
  • SMUDebugTool:Ryzen平台硬件全流程控制的专业级调试方案
  • Vue—— Vue3 + Node.js 后台管理系统 之 【组件通信技巧】
  • 游戏模组管理工具2024版:多游戏兼容的新手友好解决方案
  • 2026年比较好的陶瓷衬板/氧化铝陶瓷衬板厂家最新TOP排行榜
  • 2026年靠谱的记忆棉枕/护颈记忆棉枕厂家最新热销排行
  • 2026年比较好的移动垃圾站设备/竖直直压式垃圾站产品质量信赖榜
  • Vue Flow嵌套流程图实战进阶:层级数据可视化与业务流程建模指南
  • Vue—— Vue3 + Node.js 后台管理系统 之 【主题系统动态应用】
  • 2026年热门的扭矩测试仪/平板测试仪行业内口碑厂家排行榜
  • 2026年长沙厨房燃料液蜡实力厂家推荐与采购指南
  • 笔记本散热优化指南:如何通过智能风扇调节提升ThinkPad使用体验
  • 3阶段优化法:从卡顿到电竞级体验
  • 2026年质量好的自动化检测设备钣金加工/净水设备钣金加工厂家推荐及选购参考榜
  • 如何高效备份抖音直播内容?直播回放管理工具实战指南
  • 2026年耐用的48V 电动车电池/电动车电池高评价厂家推荐
  • 解决游戏控制器识别难题的ViGEmBus虚拟设备驱动
  • 2026年1月长沙厨房燃料白油供应厂家综合评测与选型指南
  • 2026年初专业的长沙厨房燃料液蜡供应商选哪家
  • 3步解锁AI游戏助手:让2048突破10000分的秘密武器
  • 城通网盘下载速度受限问题的技术解决方案与性能优化实践
  • 想保存无水印视频却不会技术?这款免费工具3步轻松搞定!
  • 2026年评价高的粘玉米碴加工成套设备/玉米碴加工成套设备用户好评厂家排行
  • 忘记QQ号不用愁!手机号查QQ工具使用指南