草庐IT

const_buffers

全部标签

muduo源码分析之Buffer

这一次我们来分析下muduo中Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们想象一下最简单的EchoServer服务器,客户端建立一个连接,以后服务器和客户端之间的通信都是通过这个connfd发送和接受数据,于是每一个connfd都应该有一个自己buffer,当我们发送数据太快,服务器发送的太慢,则服务器会将待发送的数据这个buffer中,所以这就是这个类的作用。我们先看下buffer的结构是什么:我们这里主要针对connfd这个对应的channel进行分析,首先上图是buffer的初始状态,前

浅谈var,let,const

众所周知,var,let是声明变量的,const是声明常量的先简单剖析一下,var,let的区别var在ES6之前使用,而到了ES6之后官方就不推荐使用了,究其原因还是因为它自身的原因,导致代码令人感觉不太合理。console.log(num);varnum=10;//打印undefined,而不是报错,这说明var将变量的声明提升//varnum;num=10;console.log(num);//打印10,var将变量num的声明提升到最顶层varnum;for(vari=0;i){console.log("222222",i);}console.log("ssss",i)//由于用var

浅谈var,let,const

众所周知,var,let是声明变量的,const是声明常量的先简单剖析一下,var,let的区别var在ES6之前使用,而到了ES6之后官方就不推荐使用了,究其原因还是因为它自身的原因,导致代码令人感觉不太合理。console.log(num);varnum=10;//打印undefined,而不是报错,这说明var将变量的声明提升//varnum;num=10;console.log(num);//打印10,var将变量num的声明提升到最顶层varnum;for(vari=0;i){console.log("222222",i);}console.log("ssss",i)//由于用var

10、const和constexpr区别

首先理解常亮表达式。常量表达式是指值不会改变,并且在编译过程就能计算得到结果。const修饰的对象无法修改,constexpr对象在编译期间就确定且无法修改。constexpr变量,编译器在编译阶段验证变量是否为一个常量表达式。constexpr侧重变量初值编译阶段确定,且无法修改。如果认定变量是一个常量表达式,就把它声明称constexpr类型。两者都必须初始化。1、constconstinti=get_size();//运行时初始化constinyj=42;//编译时初始化1.1const对象仅在文件内有效如果要多个文件共享一个const对象,需要加关键字externexternconst

10、const和constexpr区别

首先理解常亮表达式。常量表达式是指值不会改变,并且在编译过程就能计算得到结果。const修饰的对象无法修改,constexpr对象在编译期间就确定且无法修改。constexpr变量,编译器在编译阶段验证变量是否为一个常量表达式。constexpr侧重变量初值编译阶段确定,且无法修改。如果认定变量是一个常量表达式,就把它声明称constexpr类型。两者都必须初始化。1、constconstinti=get_size();//运行时初始化constinyj=42;//编译时初始化1.1const对象仅在文件内有效如果要多个文件共享一个const对象,需要加关键字externexternconst

javascript中的var,let,const区别

const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于var来说是这样执行的varm;console.log(m);m=10;let不存在变量提升,会直接报错   2、var是全局变量,可以跨块访问,但不能跨函数访问   let不能跨块访问,也不能跨函数访问        3、var支持修改原来属性的值,并且最后定义的值会覆盖原来的值let不支持修改原来定义的值   4、var是全局变量,会自动添加全局属性window,而let不会    5、var由于存在变

javascript中的var,let,const区别

const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于var来说是这样执行的varm;console.log(m);m=10;let不存在变量提升,会直接报错   2、var是全局变量,可以跨块访问,但不能跨函数访问   let不能跨块访问,也不能跨函数访问        3、var支持修改原来属性的值,并且最后定义的值会覆盖原来的值let不支持修改原来定义的值   4、var是全局变量,会自动添加全局属性window,而let不会    5、var由于存在变

我不认为PG的Double Buffering是更优秀的解决方案

关于PG在Sharedbuffers上的DOUBLEBUFFERING设计,一直是争议极多的。有一些搞PG的朋友认为这是PG充分利用OSCACHE的一种特殊设计,是PG数据库设计中比较优秀的地方。还有一些朋友则认为这是一种过时的设计,与当前数据库技术的发展潮流所相违背的。前些天有几个朋友谈到这个问题,希望我写篇位置表达下我的观点。以我这些年做数据库优化的经验来看,DOUBLEBUFFERING的设计如果算是一种技术上的进步,在这一点上我一直是不太认同的。众所周知,现在几乎所有的现代数据库产品都是用AIO/DIO等方式来访问底层存储系统,只有PG目前还通过BUFFER/CACHE来读取物理文件。

我不认为PG的Double Buffering是更优秀的解决方案

关于PG在Sharedbuffers上的DOUBLEBUFFERING设计,一直是争议极多的。有一些搞PG的朋友认为这是PG充分利用OSCACHE的一种特殊设计,是PG数据库设计中比较优秀的地方。还有一些朋友则认为这是一种过时的设计,与当前数据库技术的发展潮流所相违背的。前些天有几个朋友谈到这个问题,希望我写篇位置表达下我的观点。以我这些年做数据库优化的经验来看,DOUBLEBUFFERING的设计如果算是一种技术上的进步,在这一点上我一直是不太认同的。众所周知,现在几乎所有的现代数据库产品都是用AIO/DIO等方式来访问底层存储系统,只有PG目前还通过BUFFER/CACHE来读取物理文件。

弄明白DOUBLE BUFFERING对PG数据库的运维与优化有什么意义

​昨天的案例讲了因为PG的DOUBLEBUFFERING导致的SQL执行忽快忽慢的问题,有些朋友在问是不是Oracle之外的很多数据库都是用类似的方式读取文件,这种DoubleBuffering技术是不是很落后,是不是必须加以改进。实际上,只要是使用文件系统,并且在读数据时没有采用DIO的数据库都会存在DOUBLEBUFFERING的问题,早期的Oracle也存在类似问题。上图比较清晰的说明了DOUBLEBUFFERING问题,对于写的情况,因为先写入CACHE,再由OS把CACHE写入磁盘,中间会有一些性能损失,不过对于现代的数据库来说,只有REDO/WAL是需要强一致性写入的,数据文件的写