logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

【C/C++】从 POSIX Socket 到 TCP 生命周期:一文理解网络 IO 的核心原理

文章摘要:理解网络IO核心原理:从POSIX Socket到TCP生命周期 本文系统梳理了C/C++网络编程的核心原理,从POSIX Socket API到TCP连接生命周期管理。主要内容包括:socket()创建文件描述符与TCP控制块,bind()绑定地址端口,listen()准备连接队列,TCP三次握手同步序列号,accept()获取已建立连接,send/recv操作内核缓冲区数据的原理。文

文章图片
#网络#c语言#c++
【C/C++】从 setjmp 到 ucontext 再到 hook:C 语言协程是怎么跑起来的?

网络服务里经常有一个矛盾:课程笔记里对这个问题的概括很直接:协程要解决的就是这个问题:业务代码看起来像同步代码,底层遇到 IO 不就绪时主动让出 CPU;等 fd 就绪后,调度器再恢复它。所以协程不是为了“炫技式切栈”,而是为高并发 IO 服务:一个函数普通调用时,执行权从调用者进入被调用者;函数返回后,栈帧销毁,不能随便回到中间某一行继续执行。协程不一样。它要支持两个基本动作:课程里列了三种常见

文章图片
#c语言#c++#java
【C/C++】用状态机和字典树统计单词:从“能数”到“数得清楚”

如果只是遇到字母就加一,很快会出错,因为一个单词包含多个字母,连续字母不能重复计数。正确的想法是:遍历每个字符时,先判断自己当前处在什么状态,再根据输入字符决定是否切换状态。我的体会是,文本处理不能只盯着“字符”,还要盯着“上下文”。状态机负责识别单词边界,字典树负责保存统计结果,一个解决解析问题,一个解决存储问题。状态后,程序能表达“我刚刚在单词中遇到了横杠,下一步要看是不是换行”的中间态。这种

文章图片
#c语言#c++#开发语言
【C/C++学习】从通讯录项目理解 C 语言里的分层设计

本文通过通讯录项目实践,阐述了C语言分层设计的重要性。项目将代码分为业务层(用户操作)、接口层(数据操作)和支撑层(存储实现),通过封装人员信息的增删查改及文件操作接口(如person_insert()、save_file()等),实现存储结构变更不影响上层逻辑。文中特别强调输入安全应使用fgets替代scanf,并指出分层设计的核心价值在于隔离变化点(如存储方式),使简单项目也能具备扩展性。该案

文章图片
#c语言#c++#学习
【C/C++】用 C 语言手写 DNS 查询:理解 UDP 和协议报文

这篇150字的摘要概括了用C语言实现DNS查询的核心内容: 本文介绍了如何通过C语言手动实现DNS查询,重点解析了UDP协议和DNS报文格式。作者通过定义DNS头部结构体(dns_header)和实现域名特殊编码(长度+内容),演示了网络协议在字节层面的处理细节。项目揭示了UDP协议虽然简单,但需要开发者自行处理网络字节序转换、报文组装等底层细节。通过对比普通字符串(www.baidu.com)和

文章图片
#c语言#c++#udp
【C/C++】多线程竞争与线程池

本文探讨多线程编程中的竞争问题与线程池管理。在多线程环境下,count++等简单操作可能因非原子性引发临界区竞争,导致数据不一致。文章对比了互斥锁、自旋锁、原子操作和CAS(比较并交换)等同步方案,指出CAS通过乐观重试避免阻塞但高竞争时效率低,不同方案需按场景选择。线程池通过任务队列、互斥锁和条件变量管理线程数量与任务调度,避免无限制创建线程。文中强调多线程编程需平衡正确性、性能和资源管理,在安

文章图片
#c语言#c++#java
【C/C++】用 C 写 HTTP 客户端

HTTP 项目表面上是写一个 GET/POST 客户端,本质上是在练 TCP 客户端的完整流程:域名解析、建立连接、构造请求、发送数据、循环接收响应。和浏览器相比,自己用 C 写一遍会发现,HTTP 文本格式很清楚,但网络 IO 的边界情况一点都不少。我的理解是,HTTP 客户端练的不只是协议文本,更是“可靠地读完不确定长度的数据”。网络编程里,读到一半、超时、对端关闭、暂时无数据都是正常情况。,

文章图片
#c语言#c++#http
【C/C++】TCP 服务器演进:从阻塞 accept 到 epoll 事件驱动

我的体会是,服务器模型的升级本质上是在控制资源:单线程省资源但并发弱,多线程并发直观但线程成本高,epoll 把并发压力转移到事件驱动模型上。连接少时没问题,连接很多时,每个线程都要栈空间和调度成本,系统资源会被迅速吃掉。它的核心思路不是“每个连接一个线程”,而是“一个线程监听很多 fd 的事件”。这条线跑通之后,问题马上出现:如果单线程阻塞处理,一个客户端卡住,后面的客户端就都要等。这里的关键变

文章图片
#c语言#c++#tcp/ip
【C/C++】MySQL 图片 BLOB 与连接池

项目主要包含两部分:一是把本地图片写入 MySQL 的 BLOB 字段,再从数据库读出还原成文件;我的理解是,数据库代码不能只追求“能插入一条数据”,还要考虑内存、连接复用、异常恢复和并发访问。每次数据库操作都新建连接,会经历 TCP 连接、认证、初始化等步骤,高并发时成本很高。读取图片时,思路也类似:先查询 BLOB 字段长度,再按 offset 分块取出,边取边写入本地文件。分块上传还能避免应

文章图片
#c语言#c++#mysql
【C/C++】从 socket 到多线程 TCP Echo 服务器:fd、accept 与 recv/send 全流程

在学习网络编程时,第一道坎不是epoll,而是搞清楚服务端从“监听端口”到“处理客户端数据”到底经历了什么。这个项目里的是一个非常直接的 TCP Echo Server:客户端发什么,服务端就原样回什么。

文章图片
#c语言#c++#tcp/ip
    共 17 条
  • 1
  • 2
  • 请选择