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

相关推荐
打工仔折腾 AI2 分钟前
Prometheus 告警推钉钉:从单群 Webhook 到跨网络 Alertmanager 实战
人工智能·后端·python·性能优化
Ivanqhz7 分钟前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
三十岁老牛再出发7 分钟前
9月18日总结
python·深度学习·机器学习
就叫你天选之人啦20 分钟前
安装torch+vllm+flash_attn的prompt
人工智能·pytorch·python
wuyk5551 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
智码看视界1 小时前
第4篇:循环神经网络及其变体 LSTM/GRU 实战
python·自然语言处理·gru·lstm·循环神经网络·情感分析·梯度消失
Web3&Basketball1 小时前
Agent外传审计实战:3类失准事故拦截脚本
python·大模型·agent·性能调优·推理优化
何以解忧,唯有..1 小时前
Milvus 向量数据库的 DDL、DML、DQL 操作详解
python
罗狮粉 991 小时前
AI-Gateway — 面向 AI Agent 的本地 Runtime Gateway
人工智能·python·inscode·ai编程
蓝胖的四次元口袋1 小时前
Python数据结构知识梳理
python