先说结论 1.volatile关键字可以让编译器层面减少优化,每次使用时必须从内存中取数据,而不是从cpu缓存或寄存器中获取 2.volatile关键字不能完全禁止指令重排,准确地说是两个volatile修饰的变量之间的命令不会进行指令重排 3.使用volatile可以解决一部分的线程并发问题,但是不能解决所有的并发问题 4.volatile只能让编译器不做指令重排的优化,但是cpu层面的指令重排仍然不受影响。如果想禁止cpu的指令重排,可以使用__sync_synchronize() 实验一:volatile修饰的变量会让编译器减少优化,每次使用时必须从内存中取数据 代码如下: cons...

举例1:make([]int,b) s:=make([]int,10)fmt.Printf("s:%v,lenofs:%v,capofs:%v \n",s,len(s),cap(s)) 打印结果:s:[0000000000],lenofs:10,capofs:10 结论:make([]int,10)创建的切片是capacity(容量)为10,且len(长度)为10,只是10个元素均为0 举例2:make([]int,b)后再append s:=make([]int,10)s=append(s,10)fmt.Printf("s:%v,lenofs:%v,capofs:%v&nb...

  MYxncHy1f6BF   2023年11月02日   20   0   0 golang切片数据cicigolang切片数据

如果没看golang切片的第一篇总结博客 golang的切片使用总结 ,请浏览之 举例9:make([]int,a,b)后访问下标a的元素 s:=make([]int,10,12)v:=s[10]fmt.Printf("v:%v",v) 打印结果: panic:runtimeerror:indexoutofrange[10]withlength10 goroutine1[running]:main.main() 结论:capacity(容量)是物理意义上的,空间归切片s所有;但len(长度)是逻辑意义上的,访问元素时是根据逻辑意义为准,因为s[10]认为是越界访问 举...

上一篇博客 volatile关键字总结博客,我们讲了两个volatile变量可以限制编译器对指令的重排,但是限制不了cpu层面的指令重排 这篇博客开始,我们演示下cpu层面的指令重排,以及如何禁止cpu层面的指令重排 实验一:复现cpu指令重排 代码如下 include<iostream> include<thread> usingnamespacestd; volatileintx=0; volatileinty=0; volatileinta=0; volatileintb=0; voidthreadFun1() { //空循环5万次,这样尽量和...

一、diskqueue是什么,为什么需要它 在nsq中消息主要存在于两种队列 一种是内存队列,内部是用go的通道实现,所以处理速度很快,缺点是一旦nsqd进程挂掉消息就丢失了,这让人难以接受,数据丢了不得被用户骂死? 一种是持久化队列,内部实现是把消息保存在磁盘文件中,即使nsqd进程突然挂掉或者服务器重启,文件仍然存在,只需重启nsqd即可,nsqd进程会重新从文件中加载消息然后再进行投递。持久化队列也是nsq能保证消息可靠投递的重要原因之一 贴出来源码,给大家看下nsqd中的两种队列,以Topic举例,文件在nsq/nsqd/topic.go typeTopicstruct{ //省...

简言 由于面试题会问到malloc的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。 Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址;3.如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。 先说结论 1.当开辟的空间小于128K时,调用brk()函数,malloc的底层实现是系统调用函数...

问题描述 初装的系统,如果输入locale查看系统字体编码,可能会出现如下报错 locale:CannotsetLC_CTYPEtodefaultlocale:Nosuchfileordirectorylocale:CannotsetLC_ALLtodefaultlocale:?????????LANG=zh_CN.UTF-8LC_CTYPE=UTF-8LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_COLLATE="zh_CN.UTF-8"LC_MONETARY="zh_CN.UTF-8"LC_MESSAGES="zh_CN.UTF-8...

http://mirrors.ustc.edu.cn/centos/7.2.1511/os/x86_64/repodata/repomd.xml:[Errno14]curl6"Couldnotresolvehost:mirrors.ustc.edu.cn;Unknownerror"Tryingothermirror.   网卡配置问题, 进入cd/etc/sysconfig/network-scripts 打开viifcfg-ens33 更改BOOTPROTO=dhcp ONBOOT=yes 启用激活网卡 执行命令  servicenetworkrestart

简介   linux环境:centos7.2   zookeeper版本:3.7.0   zookeeper下载地址请参考笔者的这篇博客:注意要下载名字里面带bin的压缩包    ​​zookeeper安装包下载地址_papaya的博客- 安装步骤 1.把zookeeper安装包放在要安装的目录下,我这里是/home/install_package 2.运行命令 tar-zxvfapache-zookeeper-3.7.0-bin.tar.gz,然后进入解压后的目录 apache-z...

今天写了一些c测试代码,用到了CAS操作,属于c11的东西,发现旧版本的gcc居然不支持,笔者原来是gcc4.8.5,而gcc到了4.9才能完全支持c11 没办法,只好升级gcc了,这里把升级步骤记录下来 步骤1:wgethttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.gz 笔者下载的是gcc9.1.0版本,如果你想下载其他版本,请参考笔者的这篇博客,找到对应的版本名字,把上面的wget命令填对就行 步骤2:下载完安装包后,解压,即命令 tarzxfgcc-9.1.0.tar....

一lua下载 二 笔者这里linux环境为centos6.864位 仅编译lua静态库 1.从上面的下载地址下载得到lua-5.2.0.tar.gz压缩包,笔者这里是放在了/home目录下 lua-5.2.0.tar.gz 即可解压得到目录lua-5.2.0 3.进入目录/home/lua-5.2.0/src 4. 执行命令 yuminstallreadline-devel 这是由于lua编译依赖readline库,而其依赖ncurses库,但没有指定 5.执行命令makelinux后面的linux表当前平台 lua-5.2.0/src目录下&nbs...

  MYxncHy1f6BF   2023年11月02日   31   0   0 静态库Lua动态库linux下编译lua

编译步骤 一.需先编译好lua,编译好静态库即可,编译lua的具体步骤如下:   1.lua5.1.5下载地址 注意:貌似使用lua5.2版本来编译luabind会出现各种奇怪的报错,所以拿lua5.1做测试   2.从上面的下载地址下载得到lua-5.1.5.tar.gz压缩包,笔者这里是放在了/home目录下,然后解压得到lua根目录,     即/home/lua-5.1.5   3.进入lua的代码目录,即/home/lua-5.1.5/src   4.&nbsp...

前言 之前给公司作网关,一直想找个牛逼点的C的或者C的redis连接库。结果很多都不近人意。 常见的是:hiredis和hirredisvip hiredis和hirredisvip都是最基础的。也没封装什么连接池啊,自动重连啊,那些东西。适合简单的场景。或者你自己手艺好,能自己封装一层好的接口。 后来尝试:cloredis 最后发现:redisplusplus 直到有一天我问同事,他们给我看redis官网推荐的C的连接库,有好多库。好几页。而平时看的redis中文网推荐的才几个。艾玛。耽误事儿啊。 然后我接触了redisplusplus(redis)。感觉蛮给力的玩意。 redis...

 nsq中diskqueue是nsq消息持久化的核心,内容较多,一共分为多篇 1.diskqueue是什么,为什么需要它,整体架构图,对外接口 2.diskqueue的元数据文件,数据文件,启动入口,元数据文件读写及保存 3.diskqueue的数据定义,运转核心ioloop()源码详解 4. diskqueue怎么写入消息,怎么对外发送消息 前面一篇博客 diskqueue的元数据文件,数据文件,启动入口,元数据文件读写和保存 中我们讲了diskqueue的两种文件存储格式,diskqueue的启动入口,元数据文件的读取和保存,如果你还没了解过,建议...

diskqueue是nsq消息持久化的核心,内容较多,故分为多篇 1.diskqueue第一篇是什么,为什么需要它,整体架构图,对外接口 2.diskqueue第二篇元数据文件,数据文件,启动入口,元数据文件的读写及保存 3.diskqueue第三篇数据定义详解,运转核心ioloop()源码详解 4. diskqueue第四篇怎么写入消息,怎么对外发送消息 5. diskqueue第五篇追尾检测,错误处理,如何正常关闭 6. diskqueue第六篇如何使用diskqueue 经过前面四篇的介绍,相信大家对diskqueue的整体架构,运转逻辑应该有很清楚的了解...

 diskqueue是nsq消息持久化的核心,内容较多,故分为多篇 1.diskqueue第一篇是什么,为什么需要它,整体架构图,对外接口 2.diskqueue第二篇元数据文件,数据文件,启动入口,元数据文件的读写及保存 3.diskqueue第三篇数据定义详解,运转核心ioloop()源码详解 4. diskqueue第四篇怎么写入消息,怎么对外发送消息 5. diskqueue第五篇追尾检测,错误处理,如何正常关闭 6. diskqueue第六篇如何使用diskqueue,示例 经过前面5篇博客的介绍,大家对diskqueue的整体框架、内部原理...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~