![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++11高性能服务器
文章平均质量分 72
紫菜花油菜花
这个作者很懒,什么都没留下…
展开
-
【C++11高性能服务器】Thread Safety Analysis,概念,用法详解
静态检查工具:Clang thread safety annotations参考连接:Thread Safety Analysis¶总览线程安全分析的工作原理非常类似于多线程程序的类型系统。除了声明数据类型(例如int、float等)之外,程序员还可以(选择性地)声明如何在多线程环境中控制对数据的访问。例如,如果foo是由互斥锁mu保护的,那么当一段代码在没有首先锁定mu的情况下对foo进行读写时,分析就会发出警告。类似地,如果有一些特定的例程应该只由GUI线程调用,那么分析将在其他线程调用这些例.原创 2021-04-21 11:00:32 · 1183 阅读 · 1 评论 -
【编程基础の基础】syscall(SYS_gettid)
解决不同进程下,线程id相同情况无法通信的问题在linux下每一个进程都一个进程id,类型pid_t,可以由 getpid()获取。POSIX线程也有线程id,类型pthread_t,可以由 pthread_self()获取,线程id由线程库维护。但是各个进程独立,所以会有不同进程中线程号相同节的情况。那么这样就会存在一个问题,我的进程p1中的线程pt1要与进程p2中的线程pt2通信怎么办?进程id不可以,线程id又可能重复,所以这里会有一个真实的线程id唯一标识,tid。glibc没有实.原创 2021-04-18 16:05:05 · 4403 阅读 · 0 评论 -
【编程基础の基础】__builtin_expect详解(汇编级解释)
这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器(优化执行,减少跳转)。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。一般的使用方法是将__builtin_expect指令封装为likely和unlikely宏。这两个宏的写法如下.#define likely(x) __builtin_expect(!!(x), 1) //x很可能为真 #define unlikely(x) __builtin_expect.原创 2021-04-18 01:05:27 · 2266 阅读 · 2 评论 -
【C++11高性能服务器】地址_端口复用技术
函数:setsockoptSO_REUSEADDR:地址复用SO_REUSEPORT:端口复用一般来说,一个{addr,port}只能被一个套接字绑定,即无法重用。不同的套接字只能绑定到不同的{addr,port}上!示例// sockfd_one, sockfd_two都要设置端口复用// 在sockfd_one绑定bind之前,设置其端口复用int opt = 1;setsockopt( sockfd_one, SOL_SOCKET,SO_REUSEADDR, (const v.原创 2021-04-09 22:22:27 · 332 阅读 · 0 评论 -
【C++11并发】何为std::atomic,其原理如何,以及使用注意事项
对原子类型的某些操作不一定是线程安全的,比如说a=a+12; 非线程安全a+=12; 线程安全分析如下Cppreference介绍成员函数(原子操作)is_lock_freestore用非原子参数替换原子对象的值load获取原子对象的值exchange交换两个原子对象的值wait阻塞线程,直到收到通知并且原子值发生变化notify_one通知至少一个线程在等待原子对象notify_all通知所有阻塞的线程等待原.原创 2021-04-09 21:47:59 · 8630 阅读 · 2 评论 -
【C++11高性能服务器】2MSL有多长?
速览MSL: Maximun Segment Lifetime,即报文最大生存时间注意:超过这个时间,报文将被丢弃!(确保旧tcp连接中链路中所有旧报文被丢弃)2MSL一般为4分钟!MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,而ip头中有一个TTL域,TTL原创 2021-04-09 21:34:06 · 572 阅读 · 0 评论 -
【C++11高性能服务器】监听套接字与已连接套接字的区别
先来结论:监听套接字的socket buffer只接受TCP连接请求过程中的syn和ack数据;已连接套接字的socket buffer主要存储的内容是两端传输的“正式数据”;两种套接字通过不同的四元组(其中客户端地址或端口不同)进行分辨服务端连接过程详解/* 服务器 */lfd=socket(..,SOCK_STREAM,..);bind(lfd,srv_addr,srv_port);/* 五元组中三元组成型: {protocal,src_addr,src_port}*/list.原创 2021-04-09 21:13:20 · 796 阅读 · 0 评论