今天跟 AI学了一手

近期一直在做通信协议相关的开发,要开发 gb28181,国网 i1,电力104协议,然后我就使用 AI 助手帮我做,做的过程中发现有一次 AI 生成的接收函数是接收一行,它的逻辑是如果不是\r\n结尾呢就从缓冲区里读取一个字节,当时我看到这个,还有点嫌弃,感觉一个一个字节读是不是太慢了,结果这几天和同事调 i1才发现 recv(1)的精妙之处。

首先,每次读一个字节并不会慢,因为数据已经在缓冲区了,说白了已经在内存里了,读内存的话是不会太慢的,其次一个一个字节读还有个好处是,读取的长度是可控的,socket 的 recv 函数不知道大家有没有用过,这个函数可以从缓冲区里读取数据,但是这个函数是有坑的,比如你如果传固定字节数,比如 recv(1024),那么这时候,如果缓冲区里不到1024个字节,那么会把所有数据读出来,但是具体多长你是不知道的,得后期再判断处理,如果缓冲区里多于1024个字节,这时才会真的读取到1024个字节,如果没数据,那么会阻塞,总结来说就是如果你传大于1的字节数,会有三种情况,但是如果你传1就不一样了,这时就只会出现两种情况,要么读取一个字节,要么没数据阻塞,这对于我们事先知道要读多少的场景就非常有帮助,比如我目标是想读1024个字节,你就可以直接 for i in range(1024): buff += sock.recv(1),这样最后buff 最后一定是1024个字节,如果你直接传1024,那么如果缓冲区里少于1024,那么你每次读都需要看到底读取了多少,还需要多少等,费 cpu。

所以说用 AI 助手不但能帮助我们写代码,而且还能学到意想不到的新东西,点个大大的赞。

相关推荐
Ray Liang1 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮1 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling1 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮4 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽5 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健20 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞21 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽1 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程1 天前
一天一个Python库:jsonschema - JSON 数据验证利器
python