比较杂的知识点合集

自己需要提高的地方
系统设计能力如何提高
多想,多看好的开源代码
看的多了,就知道东西该如何进行设计了

多线程安全
内存越界
栈溢出
堆溢出
内存泄漏
stl容器相关的bug

1.多线程访问stl容器时,记得对于begin、end、size、empty函数也加锁
2.lamda表达式需要补起来啊,否则在使用时会出现一些理解不透导致的问题。
3.多采用assert断言宏来进行数据验证,能够有效排查掉很多运行时的错误。
尤其是数据验证的代码
4.耦合度高的代码,可采用gtest和gmock结合的方式来写测试用例
5.加强自己的debug调试能力

6.x86_64平台和arm平台下用户空间地址的范围
https://www.kernel.org/doc/html/latest/arm64/memory.html
https://www.kernel.org/doc/html/latest/x86/x86_64/mm.html

7.计算结构体中成员偏移量
#define OFFSET(TYPE, MEMBER)
((unsigned long)
(&(((TYPE *)0)->MEMBER))
)

8 去掉不必要的流程
在优化时,用空间换时间,或者用时间换空间,这个是普通程序员做的事情。
优化是找出不必要的点(流程或步骤),去掉后就能获得性能。
io不是重点,cpu才是重点,去掉不必要的过程、计算、拷贝、数据交换
对于不必要的数据交换,举个例子
生产者与消费者的衔接通过一个容器,也可以通过lamda
比如流重组,之前公司设计的流重组性能一直上不去
原来的设计是这样的, 如果1个数据包不是当前序,就拷贝
在乱序率为5%的数据环境下,拷贝率是远大于5%的
因为一个流中间某个包乱序了,会导致后面一系列包都发生拷贝
我给了一个预判:这些拷贝大多数是不需要发生的
改进方案:
数据包的乱序处理是批量的
例如连续接入100个数据包,大量乱序包虽然在处理该包的时刻是乱序的,但放在100个包的环境下,就不是乱序的了,所以当乱序发生时只做标记,并在批量处理出口,仍然乱序的包才拷贝,这样拷贝率只有不到以前的1%了,不缓存数据包。
一批包的缓存都是dpdk的零拷贝缓存

能优化的点太多
当然最常见的模式就是在生产者与消费者之间
生产者=>数据容器=>消费者
改变成
生产者<嵌入=消费逻辑
及时消费,这样内存,cpu都会有提高

推荐全头文件+模板编程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值