7 西门仙忍

尚未进行身份认证

坚持走自己的路

等级
TA的排名 4w+

Append写入方式的收益和成本分析

Append写入收益:内存无Page锁:追加写,无需Page锁。 SSD友好:追加写vs随机写 CPU友好:无Page锁,提升CPU缓存命中率。追加写,提升CPU缓存命中率。连续内存的查找替代链表查找,提升CPU缓存命中率。Append成本分析:首先分析一下Append方式对数据访问的影响:在常见的数据库系统中,对数据的访问通常分为两大部分:确认在哪个Page,然后在Page内...

2019-09-17 16:05:57

Lock-Free?还是多入口?

最近一段时间,感觉大家对于Lock-Free的兴趣又高涨了起来,Lock-Free大有包治百病、一统江湖之势,特写下此文,希望对围观者有所帮助。让我们先从一个简单的场景开始:考虑一个需要频繁并发访问的Freelist,这应该是许多应用程序中最常见的结构了,如果我们使用基本设计,用一个简单的Mutex量来保护这个Freelist,那么在高并发环境下它很容易成为性能的瓶颈。然后该如何优...

2019-09-12 11:44:03

内存屏障

RCU(Read-CopyUpdate),是Linux中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是Linux内核实现的一种针对“读多写少”的共享数据的同步机制。不同于其他的同步机制,它允许多个读者同时访问共享数据,而且读者的性能不会受影响(“随意读”),读者与写者之间也...

2019-09-10 09:54:43

Free链表的申请方式分析

MySQL理解BP是数据的管理结构,多个BP相当于把数据进行比如HASH的拆分了。原地写,每次读写,如果不在BP中,都会从对应的BP中申请一个BLOCK。RocksDBBP是数据的管理结构,同MySQL。在写场景下,多个线程并发append有序写入。貌似使用一个BLOCK不大好搞。使用内存池比较好因此从arena中申请内存到memtable。但是可以做到比如把inmemt...

2019-09-05 19:44:19

LINUX共享内存使用常见陷阱与分析

所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数...

2019-09-03 15:45:21

HBase最佳实践-用好你的操作系统

终于又切回HBase模式了,之前一段时间因为工作的原因了解接触了一段时间大数据生态的很多其他组件(诸如Parquet、Carbondata、Hive、SparkSQL、TPC-DS/TPC-H等),虽然只是走马观花,但也受益良多。对视野、思维模式都有极其重要的作用,至少,扩展了大数据领域的对话圈。这里也斗胆建议朋友能在深入研究一门学问的同时博览周边学问,相信必然会大有裨益。来说正题,操作系统这...

2019-09-03 14:38:55

内核月报

数据库内核月报-2014/10#01MySQL·5.7重构·OptimizerCostModel#02MySQL·系统限制·text字段数#03MySQL·捉虫动态·binlog重放失败#04MySQL·捉虫动态·从库OOM#05MySQL·捉虫动态·崩溃恢复失败#06MySQL·功能改进·InnoDB...

2019-07-15 11:17:39

正则基础之——贪婪与非贪婪模式

1        概述贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。属于贪婪模式的量词,也叫做匹配优先量词,包括:“{m,n}”、“{m,}”、“?”、“*”和“+”。在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,

2016-07-24 15:31:50

CAS原子操作实现无锁及性能分析

CAS原子操作实现无锁及性能分析 Author:EchoChen(陈斌)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:Nov13th,2014最近在研究nginx的自旋锁的时候,又见到了GCCCAS原子操作,于是决定动手分析下CAS实现的无

2015-11-26 12:22:31

Nginx Upstream Keepalive 分析

1.  实现原理Nginx1.1.14版本以前upstream连接建立和获取的机制如下图所示,Nginx会在一开始创建connectionpool(进程间不共享,可以避免锁),提供给所有向前/后的连接。 如果要实现upstream长连接,则每个进程需要另外一个connectionpool,里面都是长连接。一旦与后端服务器建立连接,则在当前请求连接结束之后不

2015-11-16 15:09:57

nginx epoll

事件处理是Nginx处理请求的核心,每个子进程在ngx_worker_process_cycle()的循环里不断调用ngx_process_events_and_timers()函数来处理各种事件。下面,分析使用epoll机制下(Linux最常用支持大并发的事件触发机制)Nginx事件处理的过程,用源代码分析和debug信息追踪两种方法。我们从ngx_worker_proces

2015-11-13 18:14:06

nginx连接池

1. 配置worker_connections模块:EventsModule语法: worker_connections number默认:位于main section的指令worker_connections和worker_processes可以帮助你计算你能处理的最大并发数max clients = worker_processes * work

2015-11-13 18:12:29

Nginx架构

nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。  当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。  master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当wor

2015-11-13 16:40:52

Linux写时拷贝技术(copy-on-write)

COW技术初窥:     在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。     那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?     在fork之后exec之

2015-08-17 15:05:51

关于子进程继承父进程属性的小问题总结

今天看书,看到用fork创建子进程的一段样例代码:[cpp] viewplaincopy#include   #include   #include     int main(void)  {      pid_t pid;      char* msg;      int k;        pri

2015-08-17 15:05:16

unix/linux下线程私有数据实现原理及使用方法

复习以前做过的爬虫系统,在做防止死链时用到了线程的私有数据,那时候仅仅是会用,至于底层是怎么实现的以及为什么一个键可以对应不同线程的指还一知半解,今天又详细的看了下相关的资料,以做总结。     在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程ID不能保证是一个小而连续的整数,并且用数组实现的时

2015-07-22 18:51:39

Multithreaded simple data type access and atomic variables

TableofcontentsIntroductionHowatomicvariablesworkAtomicvariablessizelimitationsUsecasesTherealthing…TimetoseesomeactionPrecautionsConslusionIntroductionBACKTOTOCInthisarticleIwoul

2015-07-20 15:36:25

atomic_inc 原子操作

atomic_inc(&v)对变量v用锁定总线的单指令进行不可分解的"原子"级增量操作,避免v的值由于中断或多处理器同时操作造成不确定状态。原子操作  所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。  原子操作需要硬件的支持,因此是架构相

2015-07-06 16:42:25

CHANGE MASTER TO语法

master_def:MASTER_HOST='host_name'|MASTER_USER='user_name'|MASTER_PASSWORD='password'|MASTER_PORT=port_num|MASTER_CONNECT_RETRY=count|MASTER_LOG_FILE='master_log_name'|MA

2015-07-03 18:44:15

nginx源码分析—内存池结构ngx_pool_t及内存管理

Content0. 序1. 内存池结构1.1ngx_pool_t结构1.2 其他相关结构1.3ngx_pool_t的逻辑结构2. 内存池操作2.1 创建内存池2.2 销毁内存池2.3 重置内存池2.4 分配内存2.4.1ngx_palloc()函数分析2.4.2ngx_palloc_block(

2015-06-26 17:13:02

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。