- 博客(218)
- 资源 (46)
- 收藏
- 关注
原创 NSQ源码分析(三)——disQueue
disQueue是Topic以及Channel中的内存消息满了以后,消息存放的实现方法,diskQueue实现了文件系统支持的FIFO队列,disQueue也是BackendQueue接口的实现,diskQueue在文件读写给我们提供了很好的学习示例。BackendQueue接口// BackendQueue represents the behavior for the secondary message storage systemtype BackendQueue interface {
2020-11-24 21:55:43
235
原创 NSQ源码分析(二)—— Topic
Topic是NSQ非常重要的概念,本次主要讲述Topic的获取、新建、Topic中消息的轮询、Topic中消息的来源、Topic的删除和退出以及Topic的暂停和取消暂停topic的相关操作主要在nsq/nsqd/topic.go中首先看下Topic结构体type Topic struct {// 64bit atomic vars need to be first for proper alignment on 32bit platformsmessageCount uint64 /
2020-11-24 21:39:52
260
原创 nsq整体架构
一、介绍 NSQ是Go语言编写的,开源的分布式消息队列中间件,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。特点:1. NSQ提供了分布式的,去中心化,且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和HA(高可用)特性。2....
2020-11-23 22:19:31
410
1
原创 实模式和保护模式区别及寻址方式
4KB-4GB-64TB? 我记得大学的汇编课程、组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了64TB?每个段最大也达4GB?更甚者分段和分页这两个高深的概念像我这种菜鸟怎么也理解不了啊...
2019-03-19 22:47:54
311
转载 存储过程和函数具体的区别:
本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 2...
2019-01-02 22:01:17
1331
1
转载 Apache和Nginx的区别
Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数...
2018-12-18 21:07:39
248
转载 Linux 进程通信(共享内存区)
共享内存是由内核出于在多个进程间交换信息的目的而留出的一块内存区(段)。如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映像到自己的私有地址空间中。如果一个进程更新了段中的数据,其他进程也立即会看到更新。由一个进程创建的段,也可以由另一个进程读写。每个进程都把它自己对共享内存的映像放入自己的地址空间。创建共享内存区int shmget(key_t key,size_t...
2018-07-26 23:28:39
229
转载 C++ 单例模式的几种实现研究
都是从网上学得,整理下自己的理解。 单例模式有两种实现模式:1)懒汉模式: 就是说当你第一次使用时才创建一个唯一的实例对象,从而实现延迟加载的效果。2)饿汉模式: 就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。 所以,从实现手法上看, 懒汉模式是在第一次使用单例对象时才完成初始化工作。因为此时可能存在多线程竞态环境,如不加锁限制会导致重复构造或构造不完全问...
2018-07-25 20:26:11
493
转载 linux内核中异步通知机制--信号处理机制
http://blog.csdn.net/yusiguyuan/article/details/23168363 什么是异步通知:很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态, 特像硬件上常提的“中断的概念”。 比较准确的说法其实应该叫做“信号驱动的异步I/O”,信号是在软件层次上对中断机制的一种模拟。阻塞I/O意味着一直等待设备可访问再访问,非阻塞I/O意...
2018-07-11 14:23:01
466
转载 socket在什么情况下可读可写
一、 下列四个条件中的任何一个满足时,socket准备好读: 1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).我们可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1; 2.连接的读这一半关闭(即:接...
2018-07-09 13:52:36
2737
转载 C++类内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 re...
2018-06-29 20:54:38
274
转载 C++何时会帮忙合成default constructor
最近在看《深度探索C++对象模型》,学到了很多东西。。。C++新手一般有两个常见的误解:1.任何class如果没有定义default constructor,就会被合成出一个来。2.编译器合成出来的default constructor会显示设定“class 内每一个data member的默认值”注意:以上两个说法都是错误的!编译器只会在以下4种情况,并且clas...
2018-06-28 14:20:20
335
转载 LevelDB : AtomicPointer
leveldb里有个AtomicPointer类:inline void MemoryBarrier() { // Seehttp://gcc.gnu.org/ml/gcc/2003-04/msg01180.html for a discussion on // this idiom. Also seehttp://en.wikipedia.org/wiki/Memory_ordering...
2018-06-21 15:05:21
242
转载 理解 Memory barrier(内存屏障)
发布于 2014 年 04 月 21 日2014 年 05 月 15 日 作者 name5566参考文献列表:http://en.wikipedia.org/wiki/Memory_barrierhttp://en.wikipedia.org/wiki/Out-of-order_executionhttps://www.kernel.org/doc/Documentation/memory-bar...
2018-06-21 13:56:32
398
转载 TCP状态转换图详解
在前面,已经介绍了TCP协议的三路握手和四次挥手。如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输、断开TCP连接通道(四次挥手)。 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程。先看TCP状态状态转换图。 ...
2018-06-08 20:02:29
2582
转载 volatile用法详解
我在开发中也常常遇到这个问题,发现通常用在两个方面,一方面是对硬件寄存器或固定内存的访问,一般要用到,这就是我们常常在寄存器的头文件常常看到的,另一个就是在多线程,或主程序和中断共享,全局变量常常用到。言归正传,看看老外是怎么说的Introduction to the Volatile Keyword认识关键字Volatile The use of volatile is poorly under...
2018-06-07 14:17:09
643
转载 Leveldb源码分析基础 1-22
见 https://blog.csdn.net/sparkliang/article/details/8567602
2018-06-03 18:22:35
267
转载 leveldb源码剖析---缓存系统
通过前面的分析可以知道,leveldb为了提高写的性能,牺牲了部分的读性能。最差的情况可能需要遍历各个level中的每个文件。为了缓解读性能,leveldb引入了缓存机制,当然,版本信息中包含各个level的文件元信息在一定程度上也可以提高读性能。leveldb提供的缓存系统的底层数据结构是一个开链哈希class ShardedLRUCache : public C...
2018-06-03 18:21:02
398
1
转载 leveldb源码剖析----compaction
根据前面的分析,背景线程的主体工作在BackgroundCompaction函数中完成。这个函数主要完成以下两个工作:如果imm_非空,则将imm_写入到磁盘中生成新的sstable文件对level中的文件进行合并。合并的目的主要是避免某个level中sstable文件过多,并且可以通过合并的过程删除掉过期的key-value...
2018-06-01 16:17:13
695
原创 LevelDB原理分析
郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为了加深印象,本文的配图是自己重新绘制的,大部分内容与原文相似,大家可以浏览原始页面 :-),感兴趣的话可以一起讨论 Leveldb 的实现原理!LevelDb日知录之一:LevelDb 101 说起...
2018-05-01 18:44:30
543
转载 linux无锁化编程--__sync_fetch_and_add系列原子操作函数
linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础。下面的东西整理自网络。先感谢大家的分享! __sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables__...
2018-04-06 20:05:48
518
转载 内存映射文件原理探索
一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应,如图...
2018-03-09 20:37:33
272
转载 跳表(SkipList)
SkipList跳表基本原理为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 Lev...
2018-03-08 21:46:12
354
转载 浅析套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Socket的基本背景在讨论这两个选项的区别时,我们需要知道的是BSD实现是所有socket实现的起源。基本上其他所有的系统某种程度上都参考了BSD socket实现(或者至少是其接口),然后开始了它们自己的独立发展进化。显然,BSD本身也是随着时间在不断发展变化的。所以较晚参考BSD的系统比较早参考BSD的系统多一些特性。所以理解BSD socket实现是理解其他socket实现的基石。下面我们...
2018-03-05 21:52:26
350
转载 图算法领域10大经典算法
作者:July 二零一一年二月十四日。参考:维基百科、本BLOG 内经典算法研究系列10篇文章。博主说明:1、本文囊括了图算法领域中的全部20个重要算法,并从中甄选出了此十大算法。2、此十大算法的评选是以我个人之见而选,其它虽未囊括于10之内,但都在本文中有所提到。-------------------------------------------第一章、基本
2017-12-26 21:41:07
32259
1
原创 开源数据库的现状
数据库作为业务的核心,在整个基础软件栈中是非常重要的一环。近几年社区也是新的方案和思想层出不穷,接下来我将总结一下近几年一些主流的开源数据库方案,其背后的设计思想以及适用场景。本人才疏学浅如有遗漏或者错误请见谅。本次分享聚焦于数据库既结构化数据存储 OLTP 及 NoSQL 领域,不会涉及 OLAP、对象存储、分布式文件系统。1 开源RDBMS与互联网的崛起很长时间以来,关系型数据
2017-10-18 17:10:07
780
转载 Git 基础 - 打标签
打标签同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签。人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做。本节我们一起来学习如何列出所有可用的标签,如何新建标签,以及各种不同类型标签之间的差别。列显已有的标签列出现有标签的命令非常简单,直接运行 git tag 即可:$ git tagv0.1v1.3显示的标签按字母顺序排列,所以标签的先
2017-10-18 14:35:26
349
原创 MySQL经典书籍推荐
MySQL技术内幕mysql使用大全,可以说方方面面都包括了。认真研读大概一本就差不多了MySQL开发者SQL权威指南《MySQL开发者SQL权威指南》这本应该是mysql的sql天书了。学mysql的sql语句,本书必不可少,缺点是看着有点别扭。高性能MySQL(第二版)(第19届Jolt Award获奖图书)(第二版着眼于健壮性、安全性及数据
2017-10-16 11:31:36
13397
转载 SQL使用(一)-----联合查询
SQL使用(一)——联合查询1.联合查询分类内连接(inner Join 或 Join)外连接(outer Join) 左外连接(left outer Join 或 left Join)右外连接(right outer Join 或 right Join)全外连接(full outer Join 或 full Join)交叉连接 (cross Join)结果集链接 (uni
2017-10-15 15:29:04
606
转载 字符串匹配的KMP算法
作者: 阮一峰 发布时间: 2013-08-28 17:12 阅读: 108442 次 推荐: 199 原文链接 [收藏] 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morri
2017-02-28 11:34:01
650
转载 【动态规划】最长公共子序列与最长公共子串
1. 问题描述子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common Subsequence, LCS),顾名思义,是指在所有的子序列中最长的那一个。子串是要求更严格的一种子序列
2017-02-15 21:41:59
408
转载 关于HTTP协议,一篇就够了
HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系
2017-02-15 14:47:14
499
转载 多线程编程中条件变量和虚假唤醒(spurious wakeup)的讨论
多线程编程中条件变量和虚假唤醒的讨论1. 概述条件变量(condition variable)是利用共享的变量进行线程之间同步的一种机制。典型的场景包括生产者-消费者模型,线程池实现等。对条件变量的使用包括两个动作:1) 线程等待某个条件, 条件为真则继续执行,条件为假则将自己挂起(避免busy wait,节省CPU资源);2) 线程执行某些处理之后,条件成立;则通知等待该
2017-01-04 18:08:55
592
转载 C++ 11 中的右值引用
右值引用的功能 首先,我并不介绍什么是右值引用,而是以一个例子里来介绍一下右值引用的功能: #include #include usingnamespace std; class obj { public : obj() { cout ">> create obj " obj(con
2017-01-03 17:51:18
403
转载 智能指针 weak_ptr
weak_ptr: weak_ptr是为了配合shared_ptr而引入的一种智能指针,它更像是shared_ptr的一个助手而不是智能指针,因为它不具有普通指针的行为,没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况.用法: weak_ptr被设计为与shared_ptr共同工作,可以从一个shared_ptr或者另一个w
2016-12-30 18:07:13
301
转载 红黑树(删除)
本文地址:http://blog.csdn.net/spch2008/article/details/9338923相对于红黑树插入操作,删除操作复杂的多。第一:先看最简单情况,即删除红色节点。删除红色节点,不影响红黑树平衡性质,如图: 只需要删除红色节点,不需要进行调整,因为不影响红黑树的性质。 黑色节点没有增多也没有减少。注意:以下几种单支情况在平衡的红黑
2016-10-26 15:48:56
353
转载 [More Effective C++]条款22有关返回值优化的验证结果
转自:http://blog.sina.com.cn/s/blog_5dbb2c470100xapn.html不知结果是否正确,有待进一步确认(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大。书生注)在[More Effective C++]条款22的最后,在返回值的返回方式上,大师Meyers推荐使用
2016-10-10 17:24:43
488
原创 STL源码分析----神奇的 list 的 sort 算法实现
STL中有一个std::sort算法,但它是不支持std::list的,因为list不提供RandomIterator的支持,但list自己提供了sort算法,把list的元素按从小到大的方式来排序,代码长度到不长,但真是难以读懂,后来扣持了一下午终于搞明白了,贴个总结上来。list::sort的代码如下(sgi stl):行数的确不多,但还真麻烦,我先说一下他是怎么实现的,但具体
2016-10-02 17:35:45
377
转载 C++11新特性:Lambda函数(匿名函数)
声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了。匿名函数在很多时候可以为编码提供便利,这在下文会提到。很多语言中的匿名函数,如C++,都是用Lambda表达式实现的。Lambda表达式又称为la
2016-09-07 15:39:48
786
转载 设计模式经典书籍推荐
很多朋友问学习设计模式的书籍,老大沧浪在FAQ里有个简短的叙述,这里我引申一下,说说自己看过或者翻过的设计模式书籍,由于水平所限,肯定有不对的地方,希望大家指正,如果大家看到好的模式相关书籍,希望能回帖补充。首 先模式是不分语言的,Beck在他的TDD一书中用python实现了Composite模式,充分证明了这一点。不过我认为目前模式方面的好书基本都是 基于java语言的,所以不管你是用
2016-08-05 19:29:17
476
Google官方下拉刷新组件SwipeRefreshLayout
2014-04-03
软件管理沉思录:SEI的项目管理、人际沟通和团队协作要诀,完整扫描版
2014-04-03
W3School离线手册(2014.3.24)
2014-04-03
DELPHI XE5 UP2 破解
2014-04-03
控制台小游戏之《推箱子》及关卡地图编辑器
2014-04-03
JavaScript、Css2.0、Css3.0、Jquery、html5等各种中文手册打包放送
2014-04-04
提高C++性能的编程技术.pdf
2014-04-09
《TCP IP详解》全三卷 中文有书签 不分割
2014-07-07
项目管理七杯茶,完整扫描版
2014-04-03
改变未来的九大算法,完整扫描版
2014-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅