- 浏览: 244349 次
- 性别:
- 来自: 南京
最新评论
-
phplife:
写的很棒,对我很有帮助,thx!
Erlang OTP学习(1):gen_server -
longshaohang:
写的不错,不过最后markLimit的讨论太少,我的理解是bu ...
BufferedInputStream实现原理分析 -
lin_464025910:
Erlang 很牛逼的 开发语言, 最近才关注 性能确实 不 ...
Erlang 文件处理(读书笔记) -
jaychang:
写的很不错MARK下
BufferedInputStream实现原理分析 -
vavi:
while (count == items.length) ...
Java锁相关总结
文章列表
今天看了下erlang file章节,内容感觉比较散,现在做个笔记:
文件操作主要有4个module
file : 这个模块主要提供对文件基本操作的方法(譬如,打开关闭文件,读写文件内容等等)
filename : 这个模块提供跨平台处理文件名的方法(即,你不用关心你的代码是运行在linux平台还是windows平台)
filelib : 这个模块其实是file module的扩展,它提供了一些更常用的方法(即,对file模块中一些方法进行封装,从而提供更简便方法)
io : 这个模块用来读取和写入数据
读文件
1. file:consult(Filename) -> {ok, Ter ...
今天细致的看了下supervisor,现在做个总结:
其中,方块代表supervisor process,它的功能很简单,就负责看管它下面的“小弟”(child processes) 并且在必要的时候对某个child process执行restart或者terminate操作;而圆形就代表worker process,它才是真正负责干活的process;特别注意,supervisor process 监控的不一定都是worker process 可以是别的supervisor(如上图)。通过以上方式,我们就可以按照一定层次结构将process管理起来,构建一个强健的容错系统 。
现在我们就看 ...
这一章有三个关键的概念:link,exit signal, system process,现在就对这些做个总结:
通常一个process是由另一个process创建,若我们不做任何处理,那么新创建的process(我们称:子process)和创建它的process(我们称:父process),在创 ...
receive代码块是如何执行的呢?
process会尝试从它的mail-box中循环取出消息进行pattern match:
1.若某一条消息pattern match成功,该条消息将从mail-box中移除并且执行相应的Expression,然后退出receive代码块(先前未匹配的消息,会重新放入mailbox)
2.若没有一条消息能够pattern match成功(或者mail-box中根本没有消息),则process阻塞在receive代码块(等待新消息),若在Time的时间范围内,依然没有消息能够pattern match,就执行超时处理TimeOutExpr,最后退出re ...
说完了gen_server,今天我们来看看gen_event。
通常我们会有这么一种需求场景:采集客户端发送的事件,并做相应的处理,如下图:
EventServer负责接收客户端发送的事件消息,当它接受到一个事件消息后,它回调所有的EventHandler处理这条信息(不同的EventHandler对同一条消息会才采取不同的响应),所以EventServer实际上是充当着代理的角色,实际的事件消息是由EventHandler处理(我们称EventHandler是EventServer的callback模块)
现在我们按照上图,实现一下EventServer:
我们可以通过add_hand ...
在《Programming Erlang》的OTP introduction章节中,作者通过循序渐进的方式,向我们展示了gen_server设计思路,现在做下总结:
在具体看gen_server之前,我们先看一个server通用框架:
在这个server里,你几乎看不到任何和具体功能相关的东西,它只提供了一个server所具备的基本框架,那它是如何运行的呢?
当我们调用start函数时,就启动了一个服务,如果服务器接收到一条消息,那么它将会把这条消息转交给Mod:handle_call或者Mod:handle_cast处理 ,然后把执行结果返回给客户端(可选),接着继续等待新消息。
从这 ...
今天学习了下Erlang单元测试,发现非常有用,现在做个总结:
我们先看一个例子(吐槽下Iteye的erlang代码高亮):
这个module负责计算1到N的和,现在我们如何确认这个module功能的正确性呢?
方法1:你可以再shell终端下,不断输入测试参数,然后验证程序输出结果,这种方法比较简单,而且可能也是每个人的首选方式,但是当我们日后不断对module进行修改,为了能够保证功能的正确性,我们又必须把以前的测试数据再输入一遍,所以这种方式不可持续发展;
方法2:编写单元测试,“一劳永逸”(下次改完module代码,我们只要跑下单元测试即可)
单元测试代码:
需要注意的几点: ...
话说linux中我最常用的几个命令就是awk, grep, vim, find,今天我们就来详细看下find命令的使用
先来一个简单例子:
find . -name "*.java" # 递归查找当前目录下所有java文件
其中:
. 表示查找路径为当前目录(你也可以指定为其他 ...
BufferedInputStream是一个带有缓冲区的输入流,通常使用它可以提高我们的读取效率,现在我们看下BufferedInputStream的实现原理:
BufferedInputStream内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户.由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快,所以BufferedInputStream的效率很高!
在具体看源码之前,我 ...
文本编辑过程中,我们常常需要对一段文本进行编辑(删除,复制或者替换),我们通常是使用鼠标拖动选中需要操作的文本,然后再进行编辑。在使用vim前,你可能还不觉得这种方式有什么不好,但是当你懂得用vim来处理这些需求时,你会发现以前真是弱爆了!
1.vim替换
vim替换指令和sed命令基本相同(多了一些特殊字符)
:s/abc/def/g 把当前光标所在行中的abc全部替换成def(标记g表示全局替换):n,m s/abc/def/g 把文件n-m行中的abc全部替换成def
通常我们需要替换到文件的最后一行,所以获取这个m值有些麻烦(难不成每次执行替换前,还需要执 ...
在文本编辑过程中,我们尝尝需要把文件中某些内容进行大写切换,若是普通的文本编辑器,似乎很只能部分满足或者就压根不能满足我们的需求,这时候就轮到vim上场了...
vim 大小写转换命令是:
gu 和 gU (u小写,U大写)
1.选择方式:
按下v或 ctrl+v 切换到选择模式,然后选择你要转换的字符,按下 u 或 U
2.指令方式(普通模式下):
gu$从当前光标所在字符开始,到结尾所有字符都转换成小写(包含当前字符)gu0从当前光标所在字符开始,到开头所有字符都转换成小写(不包含当前字符)0gu$把当前光标所在行的所有字符都转换成小写 (等价于: V gu 或者 g~~)gu ...
不知道从什么时候开始,渐渐放弃了gedit,nodepad,而选择使用vim来编辑文件,不敢说自己vim有多熟练,但是确实被vim散发出的魅力所吸引.现在记录自己Vim学习的点点滴滴并且不断的更新,总结,期望有一天,能够练成vim大法!
vim看上去土不拉几的,几乎没有什么界面可言,但是当我了解它的“漂移”后,我深深感受它的威力所在(光这一点就是普通文本编辑器无可比拟的).
首先什么是“漂移”? 其实只不过是把光标在文件中快速移动,但由于这移动实在是令你想不到的方便与酷,所以我们不得不用“漂移”这个词来形容它
现在列一下自己总结的漂移指令(漂移都是在vim普通模式下使用):
行漂移
h ...
Https流程(简单认识)
- 博客分类:
- Https相关
最经看了一些关于https的东西,比较乱,现在做个总结(不一定正确,而且很多细节没挖掘,只是目前的一个粗浅认识)
Https流程图
从这个图我们可以看出:
由于浏览器和服务器之间对数据传输进行了对称加密,从而保证了 ...
上一节(http://diaocow.iteye.com/blog/1734253)我们对TinyMQ进行了概述,这一节我们将着重看一下作者是如何实现消息的发布/订阅
在看源代码之前我们需要了解一些module以及函数的作用:
dict:new()
创建一个 Key-Value Dictionary(可以理解为就是一个map)
dict:find(Key, Dict) -> {ok, Value} | error
从Dict1查询Key对应的Value,若存在返回 {ok, Value} 否则返回error
dict:store(Key, Value, Dict1) ...
最近在学习erlang,了解了下它的基本语法以及相关特性,但是一直没有比较大的进展.前天在微博上无意中发现一个用erlang写的迷你的消息队列TinyMQ(源代码文件不足50K),这激发了我极大的兴趣,抱着学习的态度,下载了作者的源代码(https://github.com/evanmiller/tinymq)进行了研究学习,收获还是蛮大的,至少了解到:
1.如何用erlang实现一个简单的消息队列(我想这也是大家最感兴趣的地方);
2.如何使用erlang otp;
3.对之前学习过的erlang语法有了更深入的理解;
下面我就和大家一起来学习TinyMQ,在开始之前,先做好以下准备:
1 ...