在Redhat6.8上编译安装clang

公司远程工作环境是redhat 6.8,gcc版本是4.4.7,还没有对C++11的完整支持。为了使用C++11,clang是一个很好的选择。 但开发环境虽然能够联网,但没有root权限,所以只好从源码编译安装。不得不说在Redhat上编译安装clang是个痛苦的过程=_=,我已经经历过了,所以把安装过程写了脚本,这样就可以很方便的在redhat上编译安装clang了。

clang is a great compiler, with a boatload of extremely helpful tools, including static analysis, run-time memory and data race analysis, and many others.

python 的多线程

在开始之前,首先要了解一下python对多线程的支持。

虚拟机层面

Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。

语言层面

在语言层面,Python对多线程提供了很好的支持,可以方便地支持创建线程、互斥锁、信号量、同步等特性。 Python中多线程相关的模块包括:threadthreadingQueue。其中thread是多线程的底层支持模块,一般不建议使用; threadingthread进行了封装,将一些线程的操作对象化,提供下列类:

1
2
3
4
5
6
7
8
9
Thread 线程类
Timer与Thread类似,但要等待一段时间后才开始运行
Lock 锁原语
RLock 可重入锁。使单线程可以再次获得已经获得的锁
Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”
Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活
Semaphore为等待锁的线程提供一个类似“等候室”的结构
BoundedSemaphore 与semaphore类似,但不允许超过初始值

Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。提供的类:

1
2
3
4
Queue队列
LifoQueue后入先出(LIFO)队列
PriorityQueue 优先队列

不够优雅但很实用的Hexo博客图片方案

用hexo写博客很不错,但是图片引用一直是个问题,官方给的解决方案是用本地的资源文件夹,但要完美工作还得放弃使用常规的markdown的语法来引用图片,转而使用一种特定的标签。这未免有点太不合理了。

1
{% asset_img example.jpg This is an example image %}

听说这个插件hexo-asset-image支持使用常规markdown语法,我没有试过。 另外,一般来说,我们部署hexo博客到github pages的同时,一般也会用git来管理我们的markdown源码。这就是说,我们就必须把本地的资源文件夹也一起用git管理,这不是一个好的选择,所以很多人选择了使用网络图床。但是图床又引入了一些新的问题,首先上传图片再拷贝url实在是太麻烦了,而且一些图床不支持https协议的话,还有可能被劫持,带来乱七八糟的广告。

所以,如果能够快速上传图片,同时自动插入对应的url,那在hexo中引用图片的体验就不错了

Erlang 学习01

Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大

Powerful Vim

Share my vimrc. It is a powerful vim config file. The keymap similar with spacemacs Description vimrc-server: Simple vimrc for server without any plugin vimrc-dev: vimrc for develop Install | Upgrade Prerequisites vim compiled with python support. Check it with vim –version | grep +python Install the required dependencies: 1 2 3 4 5 6 7 8 9 # ubuntu sudo apt-get install exuberant-ctags git ack-grep sudo apt-get install silversearcher-ag

从Vim迁移到Spacemacs

之前有接触过emacs,感触最深的就是和Lisp比起来vimscript实在是太蹩脚了。但习惯了vim,考虑到迁移成本还是没有使用emacs。 最近Spacemacs挺火的,能够有vim几乎所有的编辑体验,这样迁移成本低了很多,有空倒是可以尝试一下,这里转一篇关于从vim迁移到spacemacs的官方文档翻译,写的清晰明了。 从Vim迁移到Spacemacs Spacemacs 不是 vim 的 Emacs 克隆, Spacemacs 没有完全模仿 vim 的行为,它只有在编辑的时候才这样。你不能指望每个 vim 指令都可用,尽管很多都是可用的。你不能用 Vimscript 配置 Spacemacs,反正没人喜欢 Vimscript。重要的是,Spacemacs 旨在使用 vim 高级编辑模式以及 Emacs 更好的配置语言来改善 vim 和 Emacs 两者。

Express Setup Development Environment with Archlinux

I tried install ubuntu in VirtualBox on my notebook. It’s not smooth enough as a productivity environment. So I turn to use ArchLinux. It’s a lightweight Linux Distribution which has no unnecessary additions unless you want. It’s perfect one if your want to setup a linux development environment on old machine. Here I write down my notes on how to Setup Archlinux development environment in VirtualBox.

memcached的网络框架

memcached并发 memcached是个单进程多线程的程序。memcached底层是用的libevent来管理事件的,下面我们就来看看这

Cpp-Interview

CPP相关的一些理解,面试中多少也会提到。这里记下来,以后有了新的理解可以再更正补充。

内存页大小为何是4K

为何物理页面的大小4K,而不是大一些或者小一些?

内核的页面大小首先跟CPU有关,不同的架构支持的页面大小也不相同,但有一个共同点,那就是肯定支持4K的页面大小。为什么处理器在设计的时候会选择4K,而不是其他,这个只有熟悉CPU历史的人才能给出答案,本人才疏学浅,回答不上来,有兴趣的自己找一找。当然处理器的设计者在考虑页面大小的时候,也不是凭空就选择了这个大小,除了历史因素,肯定综合了考虑了大页面、小页面的优缺点,所以这里主要列出这些优缺点,通过这些比较来发现内核为什么将默认的页面大小选择为4K。