自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 Markdown超详细使用说明

介绍了Markdown的来源,使用场景,并以丰富的示例,详细介绍了Markdown的各种语法,帮助大家更好的使用Markdown。如果您觉得有用,也欢迎将本文推荐给您的朋友。

2019-12-24 15:03:06 3063 5

原创 【算法学堂】字符串基础算法

字符串是程序中使用最广的数据结构之一,本文以大量的示例和代码讲解了字符串的常见算法,包括大小写转换、Atoi、宝石与石头(leetcode第771题),希望对大家有所帮助。如果您觉得有用,也欢迎将本文推荐给您的朋友。

2019-12-20 10:52:04 537

原创 zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令

zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh)。 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认服务器当前的工作情况(这也是服务器监控告警的基础)。 本文所讲的zkCli.sh和zkServer.sh均位于以下目录中: /usr/local/zookeeper-server1 目录分布情

2015-09-25 09:31:23 35158

转载 zookeeper配置详解

详细介绍了zookeeper的各项配置及其意义

2015-09-24 20:02:05 1018

原创 zookeeper集群搭建

最近公司用到了zookeeper做集群管理,这里按步骤记录一下其中的一些经验,也给后来的同学一些参考。由于这里只有一台服务器,因此搭建的其实是伪集群,多台服务器的搭建流程类似。 集群搭建环境: 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 集群搭建步骤: 1. 确保机器安装了jdk [r

2015-09-24 17:21:27 1710

原创 无锁编程(七) - 实战

数据与进程对等的处理 场景:某服务需要支持海量用户,在一台物理机器上运行了多个进程/线程。对于数据应该如何处理以保证安全快速的访问数据呢? 解决方案:“分” 分号段 分进程 分端口 分库分表 单一生产者与单一消费者 场景: 网络接入进程与逻辑处理进程通过共享内存通讯。我们要如何进行设计? 通常的实现:读写加锁 示例:无锁内存队列的实现 append_data(src

2015-09-23 21:15:31 805

原创 无锁编程(六) - seqlock(顺序锁)

seqlock(顺序锁)用于能够区分读与写的场合,并且是读操作很多、写操作很少,写操作的优先权大于读操作。seqlock的实现思路是,用一个递增的整型数表示sequence。写操作进入临界区时,sequence++;退出临界区时,sequence再++。写操作还需要获得一个锁(比如mutex),这个锁仅用于写写互斥,以保证同一时间最多只有一个正在进行的写操作。当sequence为奇数时

2015-09-23 19:49:41 744

原创 无锁编程(五) - RCU(Read-Copy-Update)

RCU(Read-Copy Update)RCU就是指读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问,但写操作在访问它时首先拷贝一个副本,然后对副本进行修改,最后在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。Linux内核中内存管理大量的运用到了RCU机制。为每个内存

2015-09-23 19:21:07 4853 2

转载 Linux Kernel CMPXCHG函数分析

最近看到Linux Kernel cmpxchg的代码,对实现很不理解。上网查了内嵌汇编以及Intel开发文档,才慢慢理解了,记录下来以享和我一样困惑的开发者。其实cmpxchg实现的原子操作原理早已被熟知:cmpxchg(void* ptr, int old, int new),如果ptr和old的值一样,则把new写到ptr内存,否则返回ptr的值,整个操作是原子的。在Intel平台下,会

2015-09-22 21:00:10 1163

原创 无锁编程(四) - CAS与ABA问题

讲解了无锁编程中的CAS解法,原理及给出了一些实例。给出了ABA问题的描述和常见解决方案。

2015-09-22 20:55:00 1312 1

原创 无锁编程(三) - 忙等待

忙等待可以看作一种特殊的无锁编程,本文详细介绍了忙等待的概念,忙等待的分类,并给出使用方法和范例

2015-09-22 17:36:13 2071

原创 无锁编程(二) - 原子操作

介绍了无锁编程之原子操作的概念,原理和原子操作的几种类型及使用方法,对原子操作和互斥锁的性能也进行一些对比

2015-09-22 14:34:53 3686 1

原创 无锁编程(一) - Double-checked Locking

Double-checked Locking,严格意义上来讲不属于无锁范畴,无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,此时就可以利用 Double-checked Locking 模式来减少锁竞争和加锁载荷。目前Double-checkedLocking已经广泛应用于单例 (Singleton)模式中。 Double

2015-09-19 23:51:18 1073

原创 无锁编程 - 大纲

介绍了锁的一些缺点,给出了无锁编程的一些思路,无锁编程主要涵盖的内容大纲和实战大纲。

2015-09-19 21:14:33 929

原创 Linux同步机制 - 多线程开发总结

总结了多线程开发中的一些常见经验

2015-09-18 14:57:33 512

原创 Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)

讲解了Linux Pthread中的一些基本概念,包括,死锁,活锁,饿死,优先级反转,为后面研究锁机制和无锁编程打下基础

2015-09-18 10:56:37 2325

原创 Linux同步机制(二) - 条件变量,信号量,文件锁,栅栏

Linux同步机制第二弹 - 讲解了条件变量,无名信号量,文件锁,栅栏的基本概念及使用

2015-09-17 16:31:21 1086

原创 字节对齐

什么是对齐,以及为什么要对齐: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因: 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据

2015-09-12 19:21:55 398

原创 Linux和Windows的换行符

先讲述了回车符号和换行符号产生的历史背景和一些有趣的来历故事,后通过自己的实验和演示彻底搞懂了Linux和Windows上换行符的区别和互相转换

2015-09-12 16:26:55 916

原创 Linux同步机制(一) - 线程锁

1 互斥锁在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。互斥锁的使用过程中,主要有pthread_mutex_initpthread_mutex_destorypthread_mutex_lockpthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。1.1 锁的创建锁可以被动态或静态创建

2015-09-11 17:22:03 1502

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除