news 2026/6/27 6:31:05

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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=(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 1:31:44

3步解锁AI游戏助手:让2048突破10000分的秘密武器

3步解锁AI游戏助手&#xff1a;让2048突破10000分的秘密武器 【免费下载链接】2048-ai AI for the 2048 game 项目地址: https://gitcode.com/gh_mirrors/20/2048-ai 告别无效尝试&#xff0c;AI带你轻松掌握数字合并的艺术 你是否在2048游戏中经常陷入数字杂乱无章的困…

作者头像 李华
网站建设 2026/6/20 13:41:41

Ryzen优化指南:用SMUDebugTool实现硬件调优与性能释放

Ryzen优化指南&#xff1a;用SMUDebugTool实现硬件调优与性能释放 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

作者头像 李华
网站建设 2026/6/23 10:38:01

SMUDebugTool完全指南:Ryzen系统调试与性能优化实战手册

SMUDebugTool完全指南&#xff1a;Ryzen系统调试与性能优化实战手册 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

作者头像 李华
网站建设 2026/6/23 10:38:47

工业级3D模型优化与STL格式转换全指南

工业级3D模型优化与STL格式转换全指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 在工业级3D打印流程中&#xff0c;3D模…

作者头像 李华
网站建设 2026/6/23 10:31:53

抖音视频下载工具使用指南:从需求到落地的完整方案

抖音视频下载工具使用指南&#xff1a;从需求到落地的完整方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容爆炸的时代&#xff0c;高效获取和管理社交媒体视频已成为内容创作者、研究人员和普…

作者头像 李华