- 博客(26)
- 收藏
- 关注
原创 libevent sample https-client time-test 居然不是ELF文件
ldd time-test不是动态可执行文件readelf -h time-testreadelf:错误:不是 ELF 文件 - 它开头的 magic 字节错误file time-testtime-test: POSIX shell script, ASCII text executable, with very long lines而 sample/.lib目录下的,才是elf文件...
2022-01-19 14:44:53 1755
原创 读《程序是怎样跑起来的》
CPU的内部结构时钟会发出信号。比如:时钟信号是1GHz,代表时钟每秒产生10亿次信号。CPU根据时钟信号来执行指令,时钟每发出一次信号,CPU就执行一次指令。时钟信号的频率越高,CPU每秒运行的指令就越多。控制器,从内存中读取指令和数据到寄存器运算器,根据指令,对数据进行运算。控制器,根据运算结果控制计算机,比如将结果显示在屏幕上。机器语言CPU能直接识别和执行的只有机器语言,本质就是0和1。机器语言级别的程序是通过寄存器来处理的。汇编语言的助记符函数执行,为什么不是跳转指令,而是
2021-12-01 16:16:39 177
原创 因HTTP响应慢导致线程队列堆积的一次事故
今天,某客户在线上做性能测试时,出现了一个幺蛾子。我们后端推送回执的线程,如果是http协议请求地址,则采用的是IO多路复用的机制,没有什么大问题。但如果是https地址,则是调用libcurl库发送HTTP请求,而且是同步等待应答回来之后,线程才会处理队列中下一个请求。今天客户提供的回执地址,ip地址是德国的,ping这个ip地址,time有200多毫秒,于是导致了这次事故。因为访问这个地址太慢,导致大量的回执消息,堆积在线程队列中。...
2021-11-26 15:52:35 1485
原创 使用libevent做底层网络框架,如何正确解字节流
主要是解TCP字节流的问题。CMPP协议,中国移动通信互联网短信网关接口协议(China Mobile Peer to Peer, CMPP),其消息结构,由消息头(所有消息公共包头)Message Header和消息体Message Body两部分组成。其中,Message Header由3个字段组成:字段名字节数类型描述Total_Length4Unsigned Integer消息总长度(含消息头及消息体)Command_Id4Unsigned Integ
2021-11-18 16:49:23 158
原创 libevent+多线程+pipe的死锁问题
libevent+多线程+pipe的死锁问题每个线程都是一个libevent实例。线程间通信使用的是管道机制,在写端调用write()时,直接写入8个字节的消息指针。读端调用read()时,每次读取8个字节。现有A、B、C三个线程,C线程会生产消息由A线程处理,A、B线程之间会互发消息各自进行处理。那么在业务高峰期处理大量数据时,可能会出现死锁问题。具体表现为:A线程当前正在处理一个消息,然后生成一个新的消息写入B线程,如果此时B线程的管道缓冲区满了,那么A线程调用write()写入B线程时,就会阻塞
2021-11-17 00:18:13 746
原创 简单研究一下c++ vector是否会栈溢出
简单研究一下c++ vector是否会栈溢出使用char数组复现问题我在linux环境下,简单复现了一下栈溢出的情况。首先使用ulimit -a | grep stack得到当前shell下应用程序的栈大小是8192K,也就是8M。在main函数中定义了一个9M空间的char数组。然后编译运行,预期运行时提示段错误。[root@wxk test]# ulimit -a | grep stackstack size (kbytes, -s) 8192[root@wxk te
2021-06-16 12:19:52 1916 1
原创 使用openssl AES ECB PKCS5Padding加解密遇到的问题(附源码示例)
使用openssl AES ECB PKCS5Padding加解密遇到的问题。
2021-01-13 20:29:51 3288 3
原创 RabbitMQ流控测试,客户端代码(ack)
#include "amqp_tcp_socket.h"#include "amqp.h"#include "amqp_framing.h"#include <unistd.h>#include <string.h>#inc
2018-06-08 10:08:40 801
原创 RabbitMQ生产者被流控,消费者速度为何降低
RabbitMQ生产者被流控,消费者速度为何降低生产环境中,本着尽可能接收下更多数据的原则,所以不对生产者速度进行控制(实际上也不能去控制生产者速度,因为这会导致更多的消息堆在内存中,从而可能导致进程崩溃)。当生产者速度过高导致流控时,RabbitMQ将阻塞生产者连接。主观上消费者速度应该至少保持不变,但实际观察发现,生产者和消费者的速度均受影响,且不平稳。查阅了相关资料,很少有关于标...
2018-06-08 00:54:08 9160 9
原创 RabbitMQ流控实测
RabbitMQ流控实测在虚拟机上安装并启动RabbitMQ服务端,使用C++客户端程序按设置速度生产消息,实测RabbitMQ流控场景。Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键相关知识回顾网上搜索了相关信息,了解到RabbitMQ有...
2018-06-06 13:51:57 3726
原创 SSH双机信任和免密码初探
在平常开发过程中,少不了的要使用ssh/scp等命令,在执行命令时经常发现会打印一写提示信息或者是需要进行交互的信息,但是一直以来都没有认真去了解过其具体过程,只止步于会用。今夜抽得一点闲暇时间,了解一下。SSH双机信任,顾名思义,通过SSH给主备双机建立互相信任的关系,信任关系一旦建立,使用ssh登录,scp拷贝等都不需要再输入密码,即实现免密,一旦实现免密,就可以很方便的通过ssh将命令发送到...
2018-06-02 11:19:44 327
原创 C++中public继承反思
在读11.6.5 iostream在设计方面的缺点章节时,作者陈硕提到了iostream在面向对象方面的设计缺陷:面向对象的public继承未满足继承非为复用,乃为被复用的Liskov替换原则。书中提到iostream的继承体系多次违反了Liskov替换原则,这些地方的继承是为了复用基类的代码,而Liskov原则提到:继承并不是为了复用代码。由此我想到我可能在最近的项目中做了一些XB事情。在最近的...
2018-06-02 11:18:07 234
原创 自动化测试的思考
大公司的工作经历是必要的,因为在那里可以学习到很多规范,很多流程,然后自己会不自觉的朝着这个方向去做人做事。虽然大多时候也会吐槽流程的繁杂,但是不得不承认,随着公司的发展,到最后都是流程的管理。人生中的第一份工作经历,即让我认识到自动化测试的重要性。虽然本人是个developer。如果没有自动化测试,项目组是绝对不敢对已商用的代码进行改动,何况是架构优化大换血。记得当时有个老大对我说过,想想每一条...
2018-06-02 11:00:39 240
原创 朴实的C++设计-读《Linux多线程服务端编程》有感
最近在读陈硕的《Linux多线程服务端编程》,对于一个正在C++路上求索的程序员来说,还是有很多收获的。毕竟前辈们已经积累了多年的经验,读书就是有这种好处,书中自有黄金屋。第11章“朴实的C++设计”中谈到,对于C++的使用,并不是一味的追求其多么高深莫测的特性,也不是去写一些深奥难懂的语句,而是“实用当头,朴实为贵,好用才是王道”。虽然C++是一门比较复杂的语言,但并不影响你把它写的清晰。过度的...
2018-06-02 10:49:38 1379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人