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

相关推荐
测试19984 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽6 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
前端若水8 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
涛声依旧-底层原理研究所9 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer
csdn_aspnet9 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
fantasy_arch9 小时前
pytorch人脸匹配模型
人工智能·pytorch·python
熊猫_豆豆9 小时前
广义相对论水星近日点进动完整详细数学推导
python·天体·广义相对论
web3.08889999 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
AI算法沐枫10 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN11 小时前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm