自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

收藏夹+记事本

仅作个人记录

  • 博客(42)
  • 收藏
  • 关注

转载 Leveldb 实现原理(转)

LevelDb日知录之一:LevelDb 101  说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。  Jeff Dean其人:http://research.goo

2017-02-02 16:01:12 403

转载 Good answer to "Riak secondary indices" performance impact

##A very good answer to help understand levelDB and secondary indices. Copied from stackoverflow.#Question1down votefavoriteWhat is the performance impact of in

2017-02-01 22:00:32 345

转载 Why Erlang suggest avoiding defensive programming( Joe Armstrong )

"defensive programming" (Was: Re: How nice should I be on exit?)Joe Armstrong Wed Mar 5 12:25:08 CET 2003Previous message: "defensive programming" (Was: Re: How nice should I be on exit?)N

2017-01-18 01:36:39 404

原创 Erlong匿名函数写递归的两种方式.

##计算N的阶层Erlang 17及之后的版本Fun = fun Fun(0) -> 1;            Fun(N) -> N * Fun(N - 1)        end.1> Fun(10).3628800在 Erlang 17之前的版本, 我们必须把函数名作为参数带到匿名函数里面  Fun = fun(Fun,

2017-01-18 01:24:25 630

原创 在Docker中运行Riak KV Cluster

以下操作基本上是follow Baho的官方指南.http://basho.com/posts/technical/riak-quick-start-with-docker/Step 1)设置DOCKER HOST环境变量$ export DOCKER_HOST="tcp://127.0.0.1:4243"Step 2) Build Riak镜像2.1)

2017-01-16 00:44:14 623

原创 如何在Node-RED中使用Riak KV

下面的步骤记录了从scratch直到可以在Node RED流程中CRUD  Riak KV中的数据.Step 1) 安装Riak KV, 并且可以运行.1.1) 下载及安装请见下面的linkhttp://docs.basho.com/riak/kv/2.2.0/downloads/1.2)启动riak KV$sudo riak

2017-01-14 07:23:37 672

原创 如何在Node-RED中使用Elasticsearch

下面的步骤记录了从scratch直到可以在Node RED流程中CRUD  Elasticsearch中的数据.Step 1) 安装Elasticsearch, 并且可以运行.1.1) 安装oracle java8, 最新版本的Elasticsearch需要java version8. 查看java版本和路径确实都是指向 version8$sudo apt-get inst

2017-01-14 03:52:59 2387

原创 如何在Node-RED中使用MQTT node

在我使用的这个Node RED版本中(V.0.16.0), 并不包括MQTT node, 在最新的版本中是否已经包括并不清楚. 下面的步骤记录了从scratch直到可以在Node RED流程中触发MQTT消息的subscribe, publish.Step 1)   安装Node RED, 并且能够运行1.1) 安装node.js, Node RED是基于node.js开发的I

2017-01-14 01:54:55 11473 2

转载 Why Threads and Basic Thread Management

Why Threads?Some years ago I saw a letter-to-the-editor in response to the need of a multitasking system, the writer said ``I don't care about multitasking because I can only do one thing at a

2017-01-11 20:26:30 397

原创 连接多个shell到同一个Erlang VM

Erlang shell可以连接多个shell到同一个VM,  可以是多个shell和VM在同一个node上, 也可以是shell和VM在不同的node上, 连接方式是一样的.Step 1) 启动第一个Erlang shell, VM也随着一起启动, 设置node名称是mynode1, cookie为mypwdkilxxen2768: ~  > erl -sname mynode1

2017-01-11 17:43:53 344

原创 为什么会出现long_schedule 问题.

在下面这个例子里, 首先在Erlang Shell里面启动monitor, 监视long_schedule事件. 然后启动一个新进程,进行一些耗时的操作, 可以观察到shell持续不断收到long_schedule事件,时长从几十毫秒到几百毫秒不等. 如果把lists:seq换成BIF函数,效果也是类似,可是既然BIF函数都有trap机制, 在运行了一部分(几十个 ?)reduction后

2017-01-11 12:06:43 783

原创 Rebar3 Raw Dependency问题及修复.

在一个Erlang应用里,  有可能会有对其他应用的依赖, 我们可以把这个依赖定义在rebar.config 文件中. 但是如果依赖的应用不符合rebar app的要求的结构, 编译的时候就会报这个错误("Dependency failure : Application jsonx not found at the top level of directory ...").导致错误的原

2017-01-11 07:14:32 987

转载 How to run program or process on specific CPU cores on Linux(转)

How to run program or process on specific CPU cores on LinuxLast updated on October 29, 2013 Authored by Dan Nanni 14 CommentsAs multi-core CPUs become increasingly popular on serv

2017-01-07 19:51:33 493

转载 Data Modeling in Riak(转)

Data modelingIt can be hard to think outside the table, but once you do, you may find interesting patterns to use in any database, even a relational one.sql-databasessql-databases. Feel free to us

2017-01-07 05:40:00 330

转载 A Peek Inside the Erlang Compiler(转)

A Peek Inside the Erlang CompilerErlang is a complex system, and I can't do its inner workings justice in a short article, but I wanted to give some insight into what goes on when a module is comp

2017-01-07 04:36:29 406

原创 Erlang 实现互斥量

以下代码片段来自"Erlang编程指南",  值得注意一点的是stop/0函数发送停止消息以后, mutex进程仅在free状态下处理, 也就是说如果目前mutex没有人使用,直接结束mutex,如果正在使用,并且有等待在此信号量上的其他进程,那么这些正在使用的进程和正在queue的进程依然可以获取到mutex执行完他们的任务,  但是所有在stop信号之后的wait调用就不会被处理了, 比较符合

2017-01-05 07:15:29 342

转载 A good statement about CAP theory.

#The statement below is from stackoverflowConsistency means that data is the same across the cluster, so you can read or write to/from any node and get the same data.Availability means the abi

2017-01-05 03:31:50 395

原创 Erlang进程创建时间统计及SMP现象.

看到Erlang编程指南里面的一个"进程创建"的性能基准测试,想放到我的环境里面用来对比一下打开SMP和关闭SMP的情况下的性能差异,结果和我未测试前想象的有点不一样.#用例 1, 创建的进程之间有单向的消息发送.     SMP  4:47> timer:tc(create_process, start, [100000]).

2017-01-03 05:13:11 2390

原创 多核处理器&类UNIX系统 -> 之多进程和多线程性能比较

网络上有很多讨论关于在*NIX系统在SMP环境下到底是应该用多线程还是多进程, 到底哪一个有更好的性能,  比如有很多人认为考虑到linux使用1-1线程模型(对内核来说, 线程就是一个进程)并且系统已经为进程处理做了很多优化,效率提升, 所以在liunx SMP环境下, 多进程和多线程几乎有做一些的性能, 加上多线程得考虑locking,更加容易导致问题. 有人认为无论是创建还是切换, 线程肯定

2017-01-02 18:18:56 778

转载 Erlang服务器内存耗尽调查(转)

本文描述Erlang服务器内存耗尽bug的解决过程。首先说明一下问题,服务器1千多人在线,16G内存快被吃光。玩家进程占用内存偏高:接下来是解决过程。第一步:查看进程数目是否正常? erlang:system_info(process_count). 进程数目合理第二步:查看节点的内存消耗在什么地方?> erlang:memory().[{tot

2016-12-28 01:59:57 312

转载 Erlang调度器详解(转)

#在翻完了Erlang垃圾回收机制详解之后, 正要准备翻译作者这篇文章的时候,发现文章的末尾作者已经附上了一个中文翻译的链接, 直接引用于此.Erlang调度器详解Erlang之所以是软实时系统,是因为有一些重要的隐含特征。其中之一是我在我的上一篇文章,Erlang Garbage Collection Details and Why It Matters中

2016-12-27 22:15:29 1538

翻译 Erlang垃圾回收机制详解(译)

Erlang垃圾回收机制详解Erlang尝试去解决的一个主要问题是创建一个高响应的软实时系统,这样的系统需要一个快速的垃圾回收机制支持,当启动垃圾回收的时候不会造成系统响应时间的延迟. 另一方面, 考虑到Erlang作为一个Immutable语言,没有destructive操作,有比较高的垃圾生产率, 所以好的垃圾回收机制就显得尤为重要.Memory Layout 内存分布在我们深入垃

2016-12-27 18:06:41 2013

翻译 Riak Erlang虚拟机调优(译)

Erlang 虚拟机调优目录SMPSchedulersPort SettingsAsynchronous Thread PoolKernel PollingWarning MessagesProcess LimitDistribution BufferErlang Built-in StorageCrash DumpsNet Kernel Tick TimeShutdown T

2016-12-23 21:53:28 1326

原创 Erlang 热补丁原理及升级方案.

11> c(test_hot_swap).{ok,test_hot_swap}12> 12> Pid = spawn(test_hot_swap, loop, []).13> Pid ! hello.                         This is a old version hello14> 14> Pid ! upgrade.upgrad

2016-12-14 17:42:57 1137

原创 Erlang tail recursion和body recursion 在OTP19.1版本上执行时间差异

我们都知道tail recursion 的好处之一是不用一直占着堆栈,递归到下一次时,上一次的堆栈就会被释放,除了这个之后执行时间上是不是也有差别呢,我们来写个例子测试一下.测试代码如下-module(test_tail).-compile(export_all).tail_fac(N) -> tail_fac(N,1). tail_fac(0,Acc) -

2016-12-14 06:26:22 312

原创 Erlang 测量进程执行时间和reduction

Erlang的进程调度不是使用时间片的分配, 而是给每个进程或Port分配一个reduction budget, 默认值是2000. 每个操作都会花费reduction, 一旦reduction budget用完,该进程就会释放CPU,然后被重新调度,再次分配到CPU的时候又分配了2000 reduction budget,  循环往复.#问题一, 如何测量一个进程消费了多少reduc

2016-12-14 03:50:31 2628

原创 Erlang 打开和关闭SMP选项之差异观察

##以下观察是基于版本otp_19.1#打开SMP选项,Erlang进程会启动两倍于关闭SMP选项的进程, 打开SMP是22个线程,关闭SMP是11个进程.1. 启动erl with SMP enabled (erl -smp enable)2. 找到进程beam.smp的进程ID3. 查看改进程包括的所有线程484: ~/erlang/test  >

2016-12-13 22:16:17 6673 1

转载 有效理解Linux同步异步阻塞非阻塞的两篇文章(转)

转载文章之一》同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上

2016-12-13 06:06:46 344

转载 The C++ Style Sweet Spot, a Conversation with Bjarne Stroustrup(转)

The C++ Style Sweet SpotA Conversation with Bjarne Stroustrup, Part Iby Bill VennersOctober 13, 2003Page 1 of 4  >>SummaryBjarne Stroustrup talks with Bill Venners ab

2016-12-09 20:31:41 224

原创 在ubuntu上安装,使用MQTT Mosquitto

在ubuntu上安装,使用MQTT Mosquitto以下描述了如何安装Mosquitto 并使用MQTT进行通信1. 引入mosquitto仓库并更新$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa$sudo apt-get update2. 执行以下命令安装mosquitto包$

2016-12-07 20:17:42 17447 3

转载 The 7 stages of refactoring(转)

The 7 stages of refactoringYou have wanted to fix that module for ages. Just one look at it and you cringe. The documentation, the weird naming of functions, classes that are just plain weir

2016-12-06 06:22:28 212

转载 分布式系统的事务处理(转)

#转自coolshell当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题:1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失。于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的问题,以及来解决单点故障问题。 通常,我们会通过两种手段来扩展我们的数据服务

2016-12-06 06:08:04 178

转载 学习ubuntu远程桌面(二):远程桌面会话管理(转)

在上一篇文章中,我们讲解了如何给ubuntu安装远程桌面及其配置,这篇文章我们再来讲解下有关ubuntu远程桌面会话的问题。一、问题描述在我们使用ubuntu远程桌面时,会经常遇到这样的问题。在连接远程桌面时,我打开的是会话A,我在会话A下处理一些工作的事情。由于自己不小心把这个远程桌面给关闭了,或者今天工作完毕关闭该远程桌面会话。等再进行连接远程桌面时,发现ubuntu会给出一个新的远程

2016-12-06 02:47:28 769

转载 学习ubuntu远程桌面(一):配置远程桌面(转)

公司服务器目前安装的都是ubuntu 14.04系统,而且由于业务需要,需要使用到ubuntu的远程桌面功能。所以本篇文章都是围绕ubuntu的远程桌面来介绍。一、远程桌面连接方式ubuntu的远程桌面连接要说简单也很简单,要说复杂也很复杂。ubuntu远程桌面连接的方式,目前主要有两种方式:基于VNC方式的和基于XRDP方式的。基于VNC方式的远程桌面连接,不在本篇文章中进行介绍。本

2016-12-06 02:41:37 7735

原创 UTF-8 可变编码格式

UTF-8 是一种可变编码格式,长度从一个字节到四个字节,可根据UTF-8字符的第一个字节来识别一个UTF-8字符的长度(具体见下面描述).因为网络中大部分的字符是ASCII码字符,UTF-8可以用一个字节表示ASCII字符,相较于UTF-16和UTF-32的两个字节或者四个字节,大幅节省了空间和传输带宽.几个UTF-8的编码例子》(用该网页工具转换 https://sites.g

2016-12-05 17:51:20 2098 1

原创 symbols are defined in a linker script file(etext, edata, end)

##以下是man page 里面的内容,源码里面使用的三个外部变量(  extern char etext, edata, end)并未定义在任何头文件里面,而是定义在了linker script file中,具体解释见最后 ##  解释NAME       etext, edata, end - end of program segmentsSYNOPSIS

2016-12-01 06:42:07 1013

原创 GCC 符号表小结

1) 如何生成不含符号表的目标文件 ?#一个方式是编译的时候使用 选项 sroot@root2768:~/test_c>gcc -s test1.croot@root2768:~/test_c> objdump -t a.out   a.out:     file format elf64-x86-64SYMBOL TABLE:no symbols# 另

2016-12-01 05:17:40 7107

原创 如何使用Erlang port 和外部程序交互

一个小例子来描述如何用Erlang port和外部程序(本例中用GDB)交互。Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]Eshell V8.1  (abort with ^G)注释: 清除之前定义的变量1> f()

2016-11-30 17:44:36 1475

翻译 C语言一些有趣的现象(例子) (译)

C语言一些有趣的现象(例子)以下是一些有趣的C程序小例子1)  case 可以位于if-else 内部#include  intmain(){    inta = 2, b = 2;    switch(a)    {    case1:

2016-11-30 03:59:13 1659

翻译 打印C程序的自身源代码(译)

打印C程序的自身源代码如何打印一个C程序自身的源代码呢? 强烈建议先思考一下在开始继续阅读之前C源文件的位置被预定于在 __FILE__宏里面,比如#include intmain(){   // Prints location of C this C code.   p

2016-11-30 03:04:17 1895

空空如也

空空如也

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

TA关注的人

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