![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一些思考
文章平均质量分 64
镇关西
linux环境C/C++开发,关注多核优化、网络,特别是TCP/IP协议栈。
展开
-
【译文】使用原子变量和GCC在C/C++中实现引用计数
C语言中,为了实现高性能,多线程编程要使用无锁数据结构(lock-free),引用计数是一种经常被使用的机制。但是,引用计数单打独斗是不行的,必须配合延迟删除机制(原文中的RCU方法),才可以高性能的、线程安全的访问对象。翻译 2021-08-06 13:29:39 · 981 阅读 · 0 评论 -
在模块内对内存的分配过早优化的缺点
最近看了一个同事写的模块,他为了提高程序执行的效率,对内存的使用做了很大的优化。通常的做法是,根据自己的需求预先分配了一个大的内存块,然后分割开来,用链表或者数组管理起来,需要的时候只需要取出来用就可以,不用的时候就放回去。可以很大程度的减少从glibc分配和释放内存的操作,大大加快了处理时间。但是真心不建议这样做,这种做法虽然提高了程序的效率,但是也限制了以后程序可修改的灵活性。提高了代原创 2012-03-10 22:53:53 · 1122 阅读 · 0 评论 -
linux的pthread_self与gettid的返回值和开销的区别
pthread_self()是POSIX的实现,它的返回值是pthread_t,pthread_t在linux中实际是无符号长整型,即unsigned long。gettid是系统调用,它的返回值是pid_t,在linux上是一个无符号整型。测试机为Intel i7 860 2.8GHz,八核,各调用一千万次,二者效率基本一致,测试代码如下:#include#include #原创 2012-05-18 12:25:36 · 16493 阅读 · 0 评论 -
高效获得Linux函数调用栈/backtrace的方法
有四种方法可以获得Linux的函数调用堆栈,参见CALL STACK TRACE GENERATION。在这里简单罗列一下文中提到的四个方案:方法1 GCC内置函数__builtin_return_address 方法2 Glibc中的backtrace函数 方法3 Jeff Muizelaar实现的增强backtrace,除了函数名,还能获得代码行号 方法4 libunwind这...原创 2014-12-31 16:16:08 · 19008 阅读 · 3 评论 -
如何分析Linux版本升级后的资源开销增加原因?
起因一个运行十余年的Linux平台应用,最近要从原来的RHEL 5.4(2.6.18)升级到RHEL6.4(2.6.32),以便适应超过32核CPU。在重新编译运行后发现,应用CPU开销从原来的150%增加到500%。通常来说,Linux内核版本升级不会降低原有程序的性能,甚至应该所提升才对。以下是对资源消耗增加其原因进行分析的过程。 一般同一源代码的应用在不同Linux操原创 2015-03-27 18:18:48 · 1808 阅读 · 0 评论