
高性能服务器
文章平均质量分 55
ChenHui246
这个作者很懒,什么都没留下…
展开
-
Linux下查看一个进程中所有线程及其运行的简略信息
ps -mp pid -o THREAD,tid,time[root]# ps -mp 1 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEroot 22.5 - - - - - - 1-02:47:59root 0.0 19 - hrtime - - 1 00:00:05root 0.4 ...原创 2021-05-20 16:00:30 · 388 阅读 · 0 评论 -
C++ map hash , [] 和 find的区别
map 和 hashmap 在使用上需要注意 [] 和 find的区别,数据不存在时 [] 会开辟内存 而find 不会。这个特性很重要。这个特性很重要,假如一个map当前size是1,使用[]访问一个不存在的key时,你再去取size,发现 size变成2 了,就是这么叼。***再假如,高并发多线程程序访问map 或 hash 的时候,为了提高性能使用读写锁,如果你再读锁里面使用[] 访问一个不存在的数据时,那就有可能崩溃了。******...原创 2021-02-24 18:02:41 · 618 阅读 · 0 评论 -
服务端数据落地方案
数据落地方案Redis 是一个高性能的key-value数据库,服务端程序广泛的使用它缓存业务数据,甚至于达到滥用的程度。我们最担心的一个问题就是万一redis崩溃了怎么办,里面的数据如果恢复,应该采用什么方式去落地保存。下面就根据不同的业务场景来提出几种不同的落地方案。1、写压力小、读压力大的数据。方案:同步写mysql,然后同步写redis。2、写压力大的数据。方案:同步写redis,然后异步写mysql;数值类的数据要采用增量的方式写,防止redis崩溃时覆盖回写脏数据。3、写压力原创 2020-09-07 12:15:12 · 555 阅读 · 0 评论 -
boost bind 和 boost function学习
#include<iostream>#include<boost/function.hpp>#include<boost/bind.hpp>usingnamespacestd;boolsome_function(inta,intb){cout<<"a="<<a<<"b="<<b<<endl;returna<b...原创 2020-06-24 20:29:12 · 186 阅读 · 0 评论 -
mysql数据存在时update,不存在时insert
https://www.cnblogs.com/liaojie970/p/6824773.html转载 2019-02-19 18:33:41 · 2470 阅读 · 0 评论 -
MSEC
https://github.com/Tencent/MSEC原创 2018-12-22 14:07:49 · 525 阅读 · 0 评论 -
被MYSQL MVCC(多版本并发控制) 坑的经历
高并发insert记录时,主键ID大的可能会比主键ID小的记录先提交成功。(以后再补充)原创 2018-12-13 17:03:17 · 658 阅读 · 1 评论 -
基于Grafana + Influxdb 的程序内性能监控
基于Grafana + Influxdb 的程序内性能监控https://www.cnblogs.com/davidwang456/p/7795263.htmlhttps://blog.youkuaiyun.com/baomw/article/details/89146300原创 2019-03-06 22:23:33 · 247 阅读 · 0 评论 -
GDB attach 调试运行中的程序
程序运行时,某个线程在某个逻辑分支卡住了一直出不来,逻辑比较复杂,判断不出来是哪个位置。因此用gdb attach 跟踪现在线程卡在哪个位置。gdb attach [pid] 调试某个进程info threads 查看该进程内所有的线程 状态thread [tid] 进入某个线程bt ...原创 2019-03-12 22:49:41 · 1729 阅读 · 0 评论 -
开源实时流媒体播放服务器程序
DarwinStreamingServer(即DSS)是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开源的基于标准的流媒体服务器,可以运行在WindowsNT和Windows2000,以及几个UNIX实现上,包括MacOSX,Linux,FreeBSD和Sol...原创 2019-04-29 16:29:14 · 1381 阅读 · 0 评论 -
redis lua脚本实现原子操作
通过lua脚本封装原子操作,对一个key设置比旧数据大的数值,并返回大的数值;如果redis里面不存在该key,直接设置。 eval "local a=redis.call('GET',KEYS[1]) if a==false then redis.call('SET',KEYS[1],ARGV[1]) return ARGV[1] elseif tonumber(ARGV[1])>t...原创 2019-06-22 21:37:12 · 2325 阅读 · 0 评论 -
架构 之 染色日志
作者:匿名用户链接:https://www.zhihu.com/question/20292868/answer/21643316来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。底层的rpc框架实现的,其实就是给每一次请求的源头处,加上一个seqence id(id内容可以是qq号+时间戳+随机数),每次记日志的时候,都打把seqence id打出来,rpc...转载 2019-07-23 20:14:25 · 1320 阅读 · 0 评论 -
C++ stl list 踩坑
C++ stl list 获取size()函数非常慢,跟shi一样,生产环境中使用被坑了,有时间看一下源码,严重怀疑是现算的。#include <iostream>#include <list>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#inc...原创 2019-07-20 23:58:20 · 604 阅读 · 0 评论 -
C++ vector 中使用pair
#include <iostream>#include <vector>using namespace std;int main(){ // int64_t li64test; // cout<<li64test<<endl; std::vector<pair<int,int> > vec; ...原创 2018-11-28 20:46:19 · 1848 阅读 · 0 评论 -
json和protobuf互转
Javahttp://code.google.com/p/protobuf-java-format/C++https://github.com/shramov/json2pbPythonhttps://github.com/NextTuesday/py-pb-converters导入模块pbjson.py即可使用。ps. 原始模块的pb2json函数会自动过滤protob...转载 2018-11-20 14:24:46 · 2680 阅读 · 0 评论 -
C++ union 联合
1、共用体是一种特殊的数据类型,允许在相同的位置存储不同的数据类型。2、可以定义一个带有多成员的共用体,但是任何时候只有一个成员带有值。3、共用体占用内存应足够存储共用体中最大成员。例如:union data { //声明了三个成员,但是长度不一(后面sizeof的结果不同机器结果不同,但double肯定是最长的),于是编译器会选取double的长的作为union data的长度原创 2016-02-17 17:56:34 · 477 阅读 · 0 评论 -
Linux 线程锁
两个线程分别计算从1加到100,并且把结果都存储在count变量中。因此为了保证数据的线程安全,在对count值进行写操作时要加锁。加锁可以通过pthread_mutex_lock()和pthread_mutex_unlock()两个函数来实现加锁与释放锁。但是实际应用中为了代码简洁以及防止程序员漏掉unlock,所以通过一个线程锁对象来实现线程锁的自释放。Thre原创 2016-04-09 20:25:26 · 676 阅读 · 0 评论 -
Linux查看一个进程内线程详情
Linux 查看一个进程中线程的状态方法一:PS在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。1.$ ps -T -p 方法二: Top1.$ top -H2.要让top输出某个特定进程并检查该进程内运行的线程状况:$ top -H -p原创 2016-12-16 11:26:50 · 5045 阅读 · 0 评论 -
mysql 远程权限分配
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作:一、允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:在本机先使用root用户登录mysql: mysql -u root -p"youpassword" 进行授权操作:mysql>GRANT A转载 2017-03-07 01:01:43 · 353 阅读 · 0 评论 -
MySQL自动重新连接
MySQL连接超时。如果使用了长连接而长期没有对数据库进行任何操作,那么在 timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。解决方法有两个:1) 增大/etc/my.cnf中wait_timeout的值,比如设置wait_timeout=8640000,即100天。这个转载 2017-05-12 15:42:07 · 3939 阅读 · 0 评论 -
Linux C++ 无锁编程 cas
(先保存,以后再整理)高并发服务器经常用到多线程编程,需要对共享数据进行操作,为了保护数据的正确性,有一种有效的方法就是加锁pthread_mutex_t。但是加锁会引起性能的下降,多个线程竞争同一个锁,抢占失败后强制上下文切换。/*************************************************************************原创 2017-07-01 19:11:02 · 4460 阅读 · 0 评论 -
C++ map和hash_map简单对比
C++ map 和 hash_map 对比map的基本数据结构是平衡二叉树,hash_map的基础数据结构是hash_table哈希表,下面程序展示了向map和hash_map中插入数据消耗时间对比。数据量较小的时候可以选择map,数据量大、对插入查找效率要求高的时候选择hash_map。/**********************************************原创 2017-12-21 17:29:07 · 4502 阅读 · 2 评论 -
C++计算数组大小、数组拷贝
原创 2018-01-10 10:57:40 · 3322 阅读 · 0 评论 -
分布式高并发服务--幂等性
重复消息是SOA服务实现中非常常见的问题,你永远不要指望调用方每次请求消息不一样,对于读操作,重复消息可能无害,可对于写操作很可能就是灾难。可以通过幂等(Idempotent)模式处理重复的消息,基本处理思路是:1、调用者给消息一个唯一请求ID标识。ID标识一个工作单元,这个工作单元只应执行一次,工作单元ID可以是Schema的一部分,也可以是一个定制的SOAP Header,服务的Contrac...转载 2018-03-08 21:43:42 · 1619 阅读 · 0 评论 -
linux boost thread
linux centos 安装boost的方法, 1 yum install boost 2 yum install boost-devel 3 yum install boost-doc安装成功。#include <iostream>#include <boost/thread/thread.hpp>using namespace std;usi...原创 2018-04-05 18:06:42 · 545 阅读 · 0 评论 -
使用boost库实现的 http get操作
/* * HttpBoostCL.h * * Created on: 2018年4月10日 * Author: Administrator */#ifndef BOOSTSTUDY_HTTPBOOSTCL_H_#define BOOSTSTUDY_HTTPBOOSTCL_H_#include <boost/asio.hpp>using boost::asio::ip::tc...原创 2018-04-12 21:33:43 · 2598 阅读 · 0 评论 -
C++ librdkafka一次崩溃记录
1、失败的地方#define rd_assert(EXPR) assert(EXPR)2、realloc失败realloc非常容易失败,当内存比较大时!https://zhidao.baidu.com/question/2011437754906553988.html3、原因定位:rebalance回调会导致realloc崩溃 ...原创 2018-09-18 17:37:13 · 946 阅读 · 0 评论 -
Linux C++ 信号量学习 sem_init sem_post sem_wait sem_timedwait
一、函数简介信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程...原创 2018-10-11 21:49:17 · 8504 阅读 · 0 评论 -
tcp粘包和拆包、断包
数据传输时,我们经常会使用tcp协议传输数据。当我们使用tcp长连接传输不同类型的数据时,会产生粘包、拆包的问题。粘包的产生:粘包可能在服务端产生也可能在客户断产生,提交数据给tcp发送时,tcp并不立刻发送此段数据,而是等待一小段时间,看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去,造成粘包;另一端在接收到数据库后,放到缓冲区中,如果消息没有被及时从缓存区取走,下次在取原创 2016-01-22 21:56:03 · 3677 阅读 · 1 评论