- 浏览: 86743 次
最新评论
文章列表
这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。
基础知识
Erlang/OTP 构建 Application
Erlang/OTP 监督者(Supervisor)
Erlang热部署 - 心跳机制(heart)
Erlang热部署 - 模块热更新(code)
- 2015-03-07 18:57
- 浏览 354
- 评论(0)
这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。
基础知识
Erlang/OTP 构建 Application
Erlang/OTP 监督者(Supervisor)
Erlang热部署 - 心跳机制(heart)
Erlang热部署 - 模块热更新(code)
- 2015-03-07 18:57
- 浏览 165
- 评论(0)
这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。
基础知识
Erlang/OTP 构建 Application
Erlang/OTP 监督者(Supervisor)
Erlang热部署 - 心跳机制(heart)
Erlang热部署 - 模块热更新(code)
- 2015-03-07 18:57
- 浏览 192
- 评论(0)
从 rabbitMQ 代码中找到 gen_server2 , 对gen_server进行了一些优化。看到前辈写的博文也提到这个,引发了我的思考。见gen_server2 - OTP gen_server优化版。gen_server2 引发的思考
正如 litaocheng 所说的:
gen_server 和 gen_server2 最大的不同是:
gen_server2 收到任何一条消息放到外部的队列中,当VM内部消息队列为空后,才进行消息处理,继续循环
gen_server 收到任何一条消息后,立即进行处理,处理完成后继续循环
其次,还有一个很重要的不同点:
gen_server2 使用的 ...
- 2015-03-06 01:44
- 浏览 736
- 评论(0)
erlang shell是用户与 erlang 运行时系统交互的界面程序。事实上,erlang VM的运行不依赖任何shell,只要在启动的时候添加参数detached就可以脱离终端。
-detached
Starts the Erlang runtime system detached from the system console. Useful for running daemons an ...
- 2015-02-16 11:02
- 浏览 454
- 评论(0)
任何语言在使用中都会遇到这样那样的问题,erlang也是。这里整理下我遇到的一些问题,避免继续踩坑。说实话,“防坑指南”这个标题有点过于标新立异,不过还是希望能引起重视,避免在实际开发中重复犯这些问题。
'--' 运算与 '++'运算
1> [1,2,3,4] -- [1] -- [2].
[2,3,4]
算是erlang经典的问题了。这是从后面算起的,先算 [1] -- [2] ,得到 [1] 后被 [1,2,3,4] --,最后得到 [2,3,4]
'++'运算也是一样的,也是从后面开始算起。
2> [1,2,3,4] -- [1] ++ [2,3,4].[]
另外,以下这 ...
- 2015-02-12 23:25
- 浏览 445
- 评论(0)
Joe Armstrong在描述Erlang的设计要求时,就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停止服务的热更新获益良多。那么Erlang是如何做到热更新的呢?这就是本文要讨论的问题。
在前面的文章也说到了。erlang VM为每个模块最多保存2份代码,当前版本'current'和旧版本'old',当模块第一次被加载时,代码就是'current'版本。如果有新的代码被加载,'current'版本代码就变成了'old'版本,新的代码就成了'current'版本。erlang用两个版本共存的方法来保证任何时候总有一个版本可用,对外服务就不会停止。
前言
为什么代码 ...
- 2015-02-10 01:08
- 浏览 504
- 评论(0)
我们知道,数组的第一个元素下标是 0。数组的范围也就是从 array[0] 到 array[size – 1]。 但实际上C/C++支持正负下标。 负下标必须在数组边界内;否则结果不可预知。 以下代码显示了正数组和负数组下标:
#include <iostream>
using namespace std;
int main() {
int intArray[1024];
for (int i = 0, j = 0; i < 1024; i++)
{
intArray[i] = j++;
}
cout << ...
- 2015-02-01 20:02
- 浏览 2021
- 评论(0)
最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下
下载地址:http://download.csdn.net/detail/cwqcwk1/8395531
入门资料:
erlang文档手册(最适合入门)
erlang编程介绍
erlang位运算与二进制解析
erlang二进制高效 ...
- 2015-01-25 19:15
- 浏览 301
- 评论(0)
最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下
下载地址:http://download.csdn.net/detail/cwqcwk1/8395531
入门资料:
erlang文档手册(最适合入门)
erlang编程介绍
erlang位运算与二进制解析
erlang二进制高效 ...
- 2015-01-25 19:15
- 浏览 160
- 评论(0)
最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下
下载地址:http://download.csdn.net/detail/cwqcwk1/8395531
入门资料:
erlang文档手册(最适合入门)
erlang编程介绍
erlang位运算与二进制解析
erlang二进制高效 ...
- 2015-01-25 19:15
- 浏览 201
- 评论(0)
erlang send是一个很基础的消息发送函数,用于进程把一个消息发给另外一个进程。这个函数可以同时用于本地节点进程通信,或者和远程节点进程之间的通信。
前言
最近有同事遇到erlang:send导致消息堆积问题,这个引起了我的强烈关注。我也看了这块的代码,这里简单做个分享。
函数原型:
erlang:send(Dest, Msg, Options) -> Res
Options可以是以下2个:
nosuspend
If the sender would have to be suspended to do the send, nosuspend is returned instea ...
- 2015-01-24 01:07
- 浏览 578
- 评论(0)
Svn有很多常用功能,比如代码比较,回退,还原,归档等等,很多时候我们想使用到这些svn功能,但又不想大费周章建立服务端SVN库。其中,建立svn库主要有两种办法,一种就是装服务端版svn软件,另一种就是文章所讲的,利用TortoiseSVN建立本地SVN库。
前提是你已安装了TortoiseSVN这个客户端版本的svn工具,下载地址猛击这里建立一个新的文件夹,这里命名为local_svn,然后,右键这个文件夹,选择TortoiseSVN菜单,选择 Create repositiory here ,如下:
然后就可以了。如下提示:
如果想使用svn,这样就好:
点击ok就可以使用了。是不是 ...
- 2015-01-16 23:32
- 浏览 599
- 评论(0)
erlang提供了binary_to_term,把一个二进制数据转为原始的erlang数据。但是,这个函数也有副作用。如果直接将对端传来的数据做一次 binary_to_term,就可能会导致VM crash掉。
binary_to_term 副作用
这是因为二进制数据带有原子时,binary_to_ ...
- 2015-01-12 00:11
- 浏览 529
- 评论(0)
erlang提供了两个函数用于erlang数据与二进制的转换,term_to_binary 把erlang数据转成一个二进制数据,binary_to_term 则是把二进制数据转为原始的erlang数据。这两个函数都是c实现的,效率很高,可用于序列化和反序列化数据,可以被直接用来当作网络封包协议。文章主要探讨这种二进制协议数据的组织形式,以及用erlang语言实现binary_to_term
前言
接触erlang可能有这些疑问,或者听别人这样说起:
1、erlang数字可以无限长,远远超过了INT64所能表示的范围,怎么表示的?
2、原子不能太长,会影响封包大小?
- 2015-01-09 01:29
- 浏览 443
- 评论(0)