http://timyang.net/category/erlang/

在云时代,我们需要有更好的能利用多核功能及分布式能力的编程语言,Erlang在这方面具有天生的优势,因此我们始终对它保持强烈关注。

按:此为客座文章,投稿人为新浪微博基础研发工程师赵鹏城(http://weibo.com/iamzpc),以下为原文。

在对一个分布式KV存储系统的研究过程中,我有幸遇到了Erlang语言。因此,我研究工作的第一目标就是快速入门Erlang语言并在实际研究过程中进一步深入理解Erlang的精髓。在为数不多的Erlang中文书籍,我选择了《Erlang编程指南》一书。

首先,我认为此书是一本值得推荐的Erlang入门书籍。第一章的讲解把一头雾水的Erlang门外汉快速带入了Erlang文化中,从中我了解了Erlang的历史、特性及为什么要使用Erlang,还了解了几个Erlang案例,让我对Erlang的兴趣大增。接下来的第二章到第十一章是Erlang的基础部分,从中我学习到了Erlang的基础数据类型,顺序和并发编程及其进程设计模式,在我读membase中的ns_server的过程中,大部分知识点都得到了充分的验证,尤其是Erlang的函数是编程思想和进程设计模式,让我清晰快速的了解了ns_server的基础流程。

其次,我认为此书是一本非常全面和深入的Erlang高级参考手册。在我研究ns_server的过程中,遇到了OTP行为包的使用问题,通过behaviour关键字,我快速定位到了本书的第十二章,第十二章对OTP的原理和使用进行详细的介绍,让我在实践中快速的理清了思路,深刻体会了Erlang在分布式和并发开发上的便捷。在进一步的实践中,我还遇到了Mnesia数据库的问题,此书用专门一章的内容详细阐述了Mnesia的知识,大大提高了我的研究效率。

总之,此书是一本既适合入门学习又适合开发中参考的Erlang权威书籍。

虽然此书如此优秀,但是还是有一些不足的,主要体现在个别中文翻译上,包括名词和一些语句的翻译,着实有些不易理解,望日后能够重新酌定。

CN Erlounge IV tweets

Saturday, Nov 14th, 2009 by Tim | 2 Comments
Filed under: Erlang | Tags: ErlangErlounge

前言

本文整理了Erlounge IV Erlang杭州开发者大会现场的记录的Tweets列表,建议先到 http://ecug.org/agenda/下载演讲文档,以便理解上下文。
Twitter的优势是小之美,整理成一篇大文章比较杂乱,仅希望能给不在现场的读者在阅读演讲稿时提供一些参考的信息。
文中 @user 方式表示用户的 twitter id,下文中提到的部分讲师Twitter id为@litaocheng @eric33yu@zoomq @sj_mackenzie @qiezi @bobcui @xushiwei @houmingyuan @aimingoo 同时也欢迎follow我的twitter: @xmpp

(Erlounge IV第一天参会人员合影)

Day 1

@litaocheng 的《Erlang开发实践》如果要做Erlang具体开发的话(而不是所谓“架构”),建议看看后续公布的视频,这个是非常好的教程。由于当时没抢到无线IP,所以没有twitter记录

@eric33yu 的 《Erlang系统调优》开始了,放弃无线上网,开始用手机发,幸亏BB打字快

Erlang process 调度原则 尽量让一个cpu忙

讲的都是实战精华,比如斑马书中提到进程字典不是一个好的编程习惯,但yufeng从实战角度鼓励用进程字典,因为进程字典性能非常好。

模式匹配相同的标签尽量放在一起 如tuple,以提高效率

讲erlang集群 所有节点都需要相互维持一个tcp连接 并要相互维持一个90s一次的心跳 开销很大

讲erlang大量数据不要用tuple,array,list来存 最好用ets

linux systemtap 来观测程序(profiler)很有用 非侵入式 不需要修改程序

Erlang发送binary时候最好大于256长度,否则每份数据都需要copy,比如一次广播发送多份下行数据。

讲erlang上不要把ulimit -n 设太高 因为每个handler 需要占用约200字节开销 即使没用

yufeng讲他每做一个服务器程序,都投入30%时间编写log代码记录重要参数 以便运行期间观察

讲erlang中如需跨语言通讯 推荐asn.1(不少现场同学也倾向于protocol buffers)

Erlang中config set/get不适合用独立进程去做 推荐ets

发现大部分erlang programmer是c++ 出身, 特别关注IO效率, cpu利用, 多核, 上下文切换开销, 内存分配/回收,总而言之就是性能, 另外一方面也许是 @eric33yu 忽悠成功 

恶狼战役的视频很震撼,这个是在ppt上看不到的 2:20 PM Nov 7th

erlang由于没有共享变量,所以进程间通讯是用message还是ets(memory db)的使用技巧是语言的特色 2:22 PM Nov 7th

恶狼战役的项目专门给初学者练手用,都是用基本语法,没用什么什么高级特性 2:38 PM Nov 7th

现在来自香港的老外Stewart Mackenzie讲 An Erlang Implementation of Restms,中英文夹杂很幽默,引起笑声阵阵 3:12 PM Nov 7th

@sj_mackenzie讲他选择erlang的故事,平时他是靠java make $ 3:14 PM Nov 7th

@sj_mackenzie解释了message queue的作用,并对比了xmpp, AMQP, atompub的一些不足,所以他建议用RestMS 3:34 PM Nov 7th

@sj_mackenzie对key value store 也很感兴趣,他推荐了另外一个erlang based riak, 也是一个dynamo克隆 http://riak.basho.com/ 3:47 PM Nov 7th

@sj_mackenzie 开始介绍 dynamo 理论了,这个是网上ppt没有的,so yet another dynamo fans.  3:49 PM Nov 7th

@sj_mackenzie 介绍 riak performance, 单机上write 18k/s, read 25k/s 3:53 PM Nov 7th
@sj_mackenzie 介绍 riak 还有一个link的特性,就像html的link一样,又向老外了解了一些link的细节 3:59 PM Nov 7th

@sj_mackenzie 现在是trustno1讲cuda变成,开场白是Parallel和concurrent的区别 4:27 PM Nov 7th

trustno1讲concurrent is coarse-grained Parallelism 4:33 PM Nov 7th

trustno1讲”premature optimization is the root of all evil”翻译成“过早优化是万恶之源”是不准确的,premature应该说是草率的优化更准确 4:45 PM Nov 7th

trustno1今天继续走“让听众听不懂”的路线,说是如果大家都听懂了他就给领导交辞呈,现在正在讲直流电平位移转为有符号数,然后突然停下来问大家前面内容有没有疑问,没人回应,然后话题继续 5:17 PM Nov 7th

Day 1, Evening

现在是 @bobcui 和 @qiezi 来分享actor erlang进程模型在c++事件,用51.com好友接口服务来做业务场景说明 8:10 PM Nov 7th

@bobcui 正在介绍51.com底层服务concurrent实现思路,coroutine协程每秒可以切换200万次,比context switch有很大优势 8:27 PM Nov 7th

@bobcui 介绍完coroutine spawn之后,引起听众讨论协程的一些缺陷,比如调度器没法主动调度,没有隔离,单个process出了问题没法像erlang那样隔离保护,伪erlang粉丝与纯erlang粉丝展开了pk 8:51 PM Nov 7th

(插图:51.com C++实现的轻量级进程模型)

纯erlang粉丝Ery Lee质疑这套c++的协程模型ac_actor,“这套模型有商用吗”, @bobcui 急了,”我们51.com已经有一百多台服务器在跑这个” 9:05 PM Nov 7th

@xushiwei 开讲各种服务器编程模型的区别,进程fork方式,Boost ASIO, 轻量process其实都很相似,不管由os还是应用来管理调度,核心问题是看哪个进程够轻量 9:27 PM Nov 7th

@xushiwei 谈到Boost ASIO缺点不够优雅,业务代码被切分支离破碎。但轻量级进程实现简单自然,易于维护且高效,不可避免是服务器编程发展方向 9:35 PM Nov 7th

Day 2

御风行的 @houmingyuan 讲网络程序的压力测试,使用erlang/otp的client比c++/python一样的机器人简单方便很多(原话:舒服太多),一个erlang process一个机器人,代码约1500行,一个星期可以做得非常完善,包括流量监控支持 10:42 AM Nov 8th

(插图:御风行的Erlang连接服务器)

御风行的连接服务器/网关,由c++改成erlang之后,代码由7924减少到2000行,状态机状态及事件都减少到一半以下。以及模式匹配比c++优雅舒适很多,性能和c++差不多,而且erlang是新手写的,c++是老手 11:02 AM Nov 8th

御风行的erlang连接服务器/网关,6500并发下,测试流量达到3w-4w packet/s 11:18 AM Nov 8th

说到erlang连接服务器6500并发下,测试流量达到3w-4w packet/s,不少提问没找到缺陷,又伤害了现场不少c++, boost asio粉丝脆弱的心灵 11:26 AM Nov 8th

@eric33yu 补充erlang内存分配的方式,erlang有200多种内存分配的方式,比一般同学自己写的内存池有不可比拟的优势。另外由于大部分erlang大牛都是c++/erlang双剑客,所以大部分c++粉丝的质疑都被轻松驳回 11:36 AM Nov 8th

发现erlang缺少一本类似effective java/c++这样的书,现场工程师有很多类似问题    12:48 PM Nov 8th

参加Erlang开发者大会一些记录

Friday, Dec 26th, 2008 by Tim | 0 Comments
Filed under: Erlang | Tags: Erlounge

Erlang开发者大会是我参与过的最温馨的一个小规模会议,没有赞助商广告,不用抢网络,有免费午餐和下午茶(水果),第二天还有免费的中午大餐。感谢xushiwei和赞助商们(盛大,金山及 opengoss),让大家能够在这么一个温馨的场所进行交流。

第一天有2个有关web game的session, 其中jackyz的麻将程序业务逻辑竟然是用JS完成的,“用Erlang写业务逻辑太繁琐了”,他是如是说。另外一个是金山的韩拓的基于Flash的象棋程 序,同时里面还实现了一个AI的机器人,他这个demo已经在google code上开源了,见 erl-chess

前文提到过的一次演讲陈杰谈网游服务器的后端技术,演讲是在第一天下午分组讨论会上。分组讨论的遗憾是很难取舍,嫌自己分身无术。周敏的MapReduce和另外一个Topic Erlang VM我也很感兴趣,但没法同时参与了。

另外还有几个相对深奥的Topic, 比如TrustNo1谈的冯诺依曼机的缺陷,Mryufeng的Inside the erlang VME2dynomo, 光听名字就很深奥。听众听完都没胆量提问了。

尾声是在ery.lee讲的Erlang电信网管软件应用, EryLee走得比较前沿,他已经用Erlang开发出大规模的商用软件了。他讲述了他从繁琐的Java EE,SOA转向轻量级的Erlang后端+Ruby on Rails前端的经历。Ery的观点比较激进,但是我比较认可。他提到目前主流的应用程序实际上都是在处理数据,实际上是一个数据流的处理,但是使用流行 的OO方式去解决问题,首先经常考虑的却是我怎么样写一个class, 或者我要用一个什么样的设计模式。但是FP语言如Erlang从第一行开始就是对数据真正的业务处理,可以更精简的完成任务。

其中我也很荣幸在大会中讲了一个XMPP Jabber的话题,于在场的开发高手进行了探讨,获益颇多。

Archive for the ‘Erlang’ Category 《Erlang编程指南》读后感的更多相关文章

  1. erlang 编程指南 第三章-顺序编程 课后练习

    1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6; sum(N) when is_integer(N) -> sum_acc(N,0); ...

  2. Erlang 101 Erlang环境和顺序编程

    笔记系列 Erlang环境和顺序编程 Erlang并发编程 Erlang分布式编程 Yaws Erlang/OTP 日期              变更说明2014-10-12 A outline, ...

  3. Erlang 102 Erlang并发编程

    笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-02 A outline 2014 ...

  4. Erlang 103 Erlang分布式编程

    Outline 笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-23 A Outl ...

  5. [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集

    很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/     ...

  6. [Erlang 0129] Erlang 杂记 VI

    把之前阅读资料的时候记下的东西,整理了一下. Adding special-purpose processor support to the Erlang VM   P23 简单介绍了Erlang C ...

  7. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  8. <译>Spark Sreaming 编程指南

    Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...

  9. Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN

    Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Data ...

随机推荐

  1. 微信支付v2开发(9) 标记客户投诉处理状态

    本文介绍微信支付中如何标记客户投诉的处理状态. 一.API Api 的 url 为: https://api.weixin.qq.com/payfeedback/update?access_token ...

  2. ajax实现简单的点击左侧菜单,右侧加载不同网页

    实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 原理:ajax的 ...

  3. 【CS Round #46 (Div. 1.5) C】Set Subtraction

    [链接]h在这里写链接 [题意] 一开始有n个数字,然后有一个数字X,把每个数字都减去X,又生成N个新的数字. 然后把这2*N个数字混在一起. 告诉你这2*N个数字是什么.让你复原出原来的N个数字,以 ...

  4. debian 9 安装后需做的几件事

    debian 9 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络 刚安装好的debian系统中,/etc/apt/sour ...

  5. pat 2-05. 求集合数据的均方差(水题)

    代码: #include<cstdio> #include<iostream> #include<cmath> using namespace std; doubl ...

  6. Scala基础知识

    1.scala的变量分为可变变量和不可变变量 不可变变量: val hello = "helloworld" 可变变量的定义方法 var str2 = "我是kw!&qu ...

  7. 【习题 5-10 UVA-1597】Searching the Web

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用map < string,vector < int > >mmap[100];来记录每一个数据段某个字符串 ...

  8. 《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping for(转)

    13.2 Spring Boot启动报错:Whitelabel Error Page 13.2 Spring Boot启动报错:Whitelabel Error Page 问题描述 Whitelabe ...

  9. 在sublime text 3中安装中文支持 分类: C_OHTERS 2015-04-24 22:04 229人阅读 评论(0) 收藏

    1.安装package control 使用control+~打开终端,然后输入以下内容并确定: import  urllib.request,os;pf='Package Control.subli ...

  10. VS提示SurfFeatureDetector不是cv的成员函数 .

    原因:没有把 opencv_nonfree243d.lib 加入lib库中. 还有两个头文件:#include <opencv2/nonfree/features2d.hpp>#inclu ...