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

相关推荐
tjc199010052 分钟前
Golang怎么实现分布式定时任务_Golang如何保证集群中定时任务不重复执行【进阶】
jvm·数据库·python
卷心菜狗3 分钟前
Python进阶--网络编程入门
python
XLYcmy5 分钟前
2026游戏安全技术竞赛-PC客户端安全-初赛 求解起点到终点的最短路径
windows·python·网络安全·dfs·bfs·游戏安全·曼哈顿距离
尘埃落定wf10 分钟前
FastAPI 鉴权怎么写?中间件和依赖注入一次说清楚
python·中间件·fastapi
2301_7735536210 分钟前
构建 Go CLI 应用的最佳实践:纯 Go 交互式命令行库选型与使用指南
jvm·数据库·python
qq_3729069313 分钟前
c#如何添加按钮点击事件_c#添加按钮点击事件的几种常见用法
jvm·数据库·python
2301_8176722618 分钟前
JavaScript 中高效定位二维数组间不匹配元素的行列索引
jvm·数据库·python
2401_8314194420 分钟前
golang如何实现验证码图片生成_golang验证码图片生成实现实战
jvm·数据库·python
LiAo_1996_Y23 分钟前
CSS实现多列等高布局_浮动布局的高级处理技巧
jvm·数据库·python
Jenlybein24 分钟前
用 uv 替代 conda,速度飙升(从 0 到 1 开始使用 uv)
后端·python·算法