c
文章平均质量分 51
Sweet_Oranges
编程变成编成
展开
-
c++ double float 相等性判断
起因在c++开发中,double或者float类型判断相等性不能简单的用等于符号进行,一般会采用如下方式进行判断static inline bool DoubleEqual(double a, double b){ return fabs(a - b) < std::numeric_limits<double>::epsilon();}为了验证这个说法,我在机器上写了如下一段代码, 结果竟然没有一次输出,貌似可以直接比较double a = 0, b =原创 2021-09-16 17:53:11 · 2459 阅读 · 0 评论 -
lockfree ringbuffer queue 总结
之前在实现基于共享内存的lockfree ringbuffer queue时候有几点疑惑的地方,做一个总结。本人能力有限,如果有错误的地方,希望能够指出。1.多进程中共享的内存和多线程中看见的内存是否一致?这个问题更多的是linux操作系统的理解,线程和进程其实都是基于clone系统调用生成的KSE,区别在于其共享内存的方式(写时复制)不一样。2.c++的atmoic在共享内存上的操作?首先要保证原子变量分配在共享内存之上,c++的内存模型理论上能够work,建议使用gcc bulitin原创 2020-09-10 12:23:32 · 466 阅读 · 0 评论 -
记录一次线上pthread_cond_broadcast引发的性能问题
前言pthread_mutex_lock是在多线程编程中必不可少的一个工具,其底层采用了futex实现,能够在用户态解决大部分的锁竞争,其性能是非常高效的。背景最近上线的一个多进程间消息队列就采用了pthread_mutex_lock和pthread_cond_t来实现pub sub模型。生产者在写入消息的时候,调用pthread_cond_broadcast来唤醒消费者。本来以为这样很完美,在测试环境也没有测出什么问题。然而上线后上游直接报ring buffer full,定位出下游.原创 2020-08-21 11:18:33 · 602 阅读 · 1 评论 -
c++ std::function 比 c function 慢
项目中大量使用functional来替代virtual函数,那么functor函数相对于c function带来的额外成本是多少呢?今天构造一个测试用例来测试下。g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)测试如下几种情况:1.c functionint _func(int a, int b) { return a + b;}2.重载operator()的structstruct _struct { int operator()(i原创 2020-07-29 11:39:21 · 504 阅读 · 0 评论 -
高性能c++ string split实现
类似于string_view。测试:分别执行100000次,split耗时257329us, boost::split耗时679503测试得知比boost::split方法大概快2倍。void split(std::vector<std::pair<const char *, size_t>> &a, const std::string &line, const char sep){ const size_t size = line..原创 2020-07-22 11:39:27 · 1073 阅读 · 0 评论 -
c++ 用 vector 替代map
当数据的key数量线性可控,且有一个不重复的hash 算法来定义key。尝试用vector来替代map 测试下性能#include <sys/time.h>#include <iostream>#include <map>#include <vector>int main(){ // std::map<int, int> test; std::vector<int> test(100, 0); f.原创 2020-07-21 10:30:13 · 825 阅读 · 0 评论 -
pthread mutex cond 进程间共享(PTHREAD_PROCESS_SHARED)性能探究
pthread中提供了pthread_mutex_t互斥锁 和 pthread_cond_t条件变量,我们通常在同一进程不同线程中使用,很少在进程间使用,这次通过实现一个生产者解锁多个阻塞消费者的例子来展示下用法。由于pthread_mutex_t不提供通过名称来在进程间共享的功能,我们通过共享内存的方式来达到共享。注意的是要指定PTHREAD_PROCESS_SHAREDstruct SHM_Data{ pthread_mutex_t mutex; pthread_con.原创 2020-07-09 16:27:19 · 3672 阅读 · 0 评论 -
共享内存实现多进程低延迟队列 10us
起因之前的博客写过通过inotify 加文件的形式来实现多进程队列的文章。这种方式在通常情况下表现不错,但是这里存在一个问题就是当消费者过慢,会产生大量的击穿内核高速缓冲区io,导致消费者卡在读取数据的瓶颈上,无法使用负载均衡等手段来提高处理能力。为了解决上述问题,引入了共享内存,众所周知,这是所有ipc中最快的通信方式,从根本上解决这个问题。下面通过实现一个producer 和 consumer 程序,来展示我的设计思路。producer由于物理内存有限,生产者会使用一个环形缓冲区来.原创 2020-07-02 13:26:05 · 691 阅读 · 0 评论 -
struct char[0] 零长数组使用
在c中虽然支持了变长数组,但是在使用的时候还是会有诸多限制。分配在栈上,也就是不能返回变长数组的指针,同时还增加了栈溢出的风险,以下是几种不能使用的场景。不能使用extern声明的长度 在struct members中定义长度 在static变量中定义长度 在函数定义中定义长度extern int n;int A[n]; // invalid: file scope VLAextern int (*p2)[n];原创 2020-06-03 18:22:44 · 307 阅读 · 0 评论 -
linux inotify 触发点探秘
起因之前写过一篇通过inotify来实现高性能的文件队列的文章,对inotify触发的点有些疑问,到底是底层文件发生变化后才trigger event还是在write complete后才触发的event。有必要搞清楚这个问题。分析查看vfs write相关源码https://github.com/torvalds/linux/blob/master/fs/read_write.cstatic ssize_t __vfs_write(struct file *file, const cha原创 2020-06-01 11:08:40 · 247 阅读 · 0 评论 -
linux 有名信号量semaphore性能探究
起因最近想基于共享内存加有名信号量实现一个进程间的共享栈,来取代thrift, 优化下ipc的延迟。测试首先测试了下thrift消息传递的延迟,分别在client调用前和server(client server位于同一台机器)收到消息打印微秒start end us776912 777005 93777152 777228 76777340 777422 82777502 777572 70测试结果表明thrift一次通信大概需要80us的延迟。如果我们改为信号量来原创 2020-05-29 11:15:59 · 859 阅读 · 1 评论 -
muduo 中 has_no_destroy 模板
在学些muduo源码中,单例模式源码中有这么一段namespace detail{// This doesn't detect inherited member functions!// http://stackoverflow.com/questions/1966362/sfinae-to-check-for-inherited-member-functionstemplate&l...原创 2020-04-27 16:28:45 · 552 阅读 · 4 评论 -
c++ std::enable_shared_from_this 的作用
通常需要使用enable_shared_from_this的场景是我们在类内部通过std::bind生成functor函数传递给其他实例时(暴露了this),当其他实例调用functor函数时,该实例有可能已经被析构,引起异常。在日常c++编程中,为了更好的管理资源,我们通常借助c++的RAII机制实现的shared_ptr来达到对资源的自动管理。class Test{ ...原创 2020-04-16 11:18:40 · 372 阅读 · 0 评论 -
基于kafka原理单机高性能微秒级别队列改造
为什么不用kafka消息队列kafka是我们日常生活中比较常见的消息队列,非常适合做消息的离线处理。但是在一些实时性要求比较高的场景下,消息自带的延迟是不可忍受的,我测试发现一条消息转发大概需要200ms,实际情况可能有所出入,但肯定是毫秒级别的。我们追求的目标是微秒级别。kafka从设计上就是倾向于面向大众,满足大部分需求。当然满足这些要求的成本就是通过牺牲了性能。所以说kafka适合做...原创 2020-04-10 15:26:13 · 249 阅读 · 0 评论