
linux系统
文章平均质量分 93
linux系统开发
D_Guco
it互联网/游戏
展开
-
多核时代下线程间的内存可见性
多核时代下线程间的内存可见性原创 2024-08-23 18:05:45 · 603 阅读 · 0 评论 -
内存的申请和释放
内存的申请和释放,malloc,free干了什么,delete[]和delete的区别原创 2021-12-25 19:27:48 · 2614 阅读 · 0 评论 -
进程间对共享内存同步的三种方式
如果我们有多个进程访问一块共享内存,有时候我们为了保证数据的一致我们不得不对共享内存中的数据采取同步措施。对于共享内存的同步基本上有以下三种方式。 一 记录锁(文件锁) 我们首先来看记录锁,记录锁的功能是当一个进程正在读或者修改文件的某一个部分时,它可以阻止其他进程修改同一文件区。它其实是“字节范围锁”,因为它锁定的是文件中的一个区域,当然,也可能是整个文件。 ...原创 2019-02-24 18:26:10 · 9969 阅读 · 0 评论 -
揭开内存屏障的面纱
推荐阅读(强烈推荐)c++标准库内存屏障的使用一 什么是内存屏障 内存屏障(英语:Memory barrier),也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。 每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性...原创 2019-01-30 19:16:37 · 3421 阅读 · 0 评论 -
linux spin_lock(自旋锁)semaphore(信号量)和mutex(互斥锁)的区别
1 spin_lock 自旋锁的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保证它自身被操作的原子性,在操作这样的结构体时都经历这样的过程:上锁-操作-解锁。 如果内核控制路径发现自旋锁“...原创 2019-01-13 22:03:32 · 3720 阅读 · 0 评论 -
服务器高并发优化配置笔记
1 查看当前TCP连接的状态和对应的连接数量: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'2 初步优化(提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC和SYN攻击。) 我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就...原创 2018-10-21 16:50:15 · 777 阅读 · 0 评论 -
唤醒线程是否要持有锁(Signal With Mutex Locked Or Not?)
我们经常需要通过某种条件去唤醒和阻塞一个线程,我们唤醒线程时是否需要继续持有锁呢,换句话说我们是先释放锁再唤醒还是先唤醒再释放锁呢? pthread_mutex_lock(&mutex);predicate=true;pthread_cond_signal(&cv); // OR: pthread_mutex_unlock(&mutex);pthread_mutex_un原创 2017-10-22 11:41:55 · 3621 阅读 · 1 评论 -
伪共享的产生原因和优化方案
一 flase sharing产生原因 在谈到false sharing问题之前我们先说cpu缓存的问题。 CPU 缓存(Cache Memory)是位于 CPU 与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决 CPU 运算速度与内存读写速度不匹配的矛盾,因为 CPU 运算速度要比内存读写速度快很多,这样会使 CPU...原创 2017-06-17 19:53:23 · 2543 阅读 · 0 评论 -
virtualBox端口转发
由于目前redis对windows的支持并不是很完美,因此在windows下开发时,我就在虚拟机中装一个ubuntu,在里面搭建好redis的环境后,在windows下连接虚拟机中的redis,当然完全可以在ubuntu下开发,就不用这么麻烦了,不过这不是我一个人能决定的,mac就更好了,哈哈原创 2017-05-20 18:04:16 · 4807 阅读 · 0 评论 -
水平触发和边缘触发的区别
在linux的IO多路复用中有水平触发,边缘触发两种模式,这两种模式的区别如下: 水平触发:如果文件描述符已经就绪可以非阻塞的执行IO操作了,此时会触发通知.允许在任意时刻重复检测IO的状态.select,poll就属于水平触发. 边缘触发:如果文件描述符自上次状态改变后有新的IO活动到来,此时会触发通知.在收到一个IO事件通知后要尽可能多的执行IO操作,因为如果在原创 2017-05-07 22:02:27 · 7745 阅读 · 0 评论 -
从零开始写select和epoll I/O多路复用网络模型
从零开始写select和epoll多路复用网络模型原创 2017-04-04 17:33:56 · 573 阅读 · 0 评论 -
cpu cache的魔法
首先简单了解一下什么是cpu cache这里推荐一篇文章吧,说的很详细。 关于cpu cache:点击打开链接 接下来我们看一些程序片段。#include #include #include int flag = 1;pthread_mutex_t lock;void* my_thread(void *){ sleep(1); ...原创 2017-03-01 11:09:10 · 1317 阅读 · 3 评论 -
共享内存,管道,socket等进程间通信方式的优缺点
进程间通信的方式有很多,常见的有信号,信号量,消息队列,管道,共享内存,和socket等,这里我们主要讨论管道,共享内存,和socket,其他的比较简单只做简单的介绍。一 信号: 信号主要用于通知某个进程发生了什么事,就像你打电话通知某个人某件事一样,事先注册号信号相应的注册函数就可以了。二 信号量: 信号量实际上是一个计数器,通常在多线程或者多进程开发中会用到,主要用...原创 2016-12-08 21:14:01 · 31346 阅读 · 0 评论 -
select和epoll的应用场景
都知道epoll相对于select模型的优点,它的速度和并发量相对于select明显的优势,但是是不是epoll就可以完全代替select呢,在得出结论之前还是先要看看他们各自的实现原理。1 select:在网络编程中统一的操作顺序是创建socket->绑定端口->监听->accept->write/read,大有客户端连接到来时,select会把该链接的文件描述符放到fd_set(一组文件描原创 2016-11-14 23:50:29 · 8083 阅读 · 2 评论