今天跟 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 助手不但能帮助我们写代码,而且还能学到意想不到的新东西,点个大大的赞。

相关推荐
min(a,b)1 天前
学习第 6 天:类型注解、装饰器与高级特性
python·学习
码云骑士1 天前
80-指令微调Instruction-Tuning-指令数据构造-多任务训练-过拟合检测
python
爱昏羔1 天前
上篇:从PDF到向量库 — 物流行业RAG系统的知识库构建全解析
python·langchain·pdf·agent·rag
麻雀飞吧1 天前
最新量化实现难点,规则和流程要先有形状
人工智能·python
用户0332126663671 天前
使用 Python 在 Word 文档中添加或删除文本框
python
LadenKiller1 天前
近期AI量化辅助,工具重点要跟学习阶段变化
人工智能·python
phltxy1 天前
LangChain_Agent中间件实战
人工智能·python·深度学习·语言模型·中间件·langchain
axinawang1 天前
第14课:查找、统计、分割字符串
python
倒流时光三十年1 天前
第一阶段 02 · Mapping 与数据类型(text vs keyword 是重点)
后端·python·django
小大宇1 天前
python蓝图、拦截器、异常处理、redis队列、线程池、控制台及日志文件输出
python