2014年1月4日星期六

[Erlang 0115] 2014值得期待的Erlang两本新书 - 坚强2002

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
[Erlang 0115] 2014值得期待的Erlang两本新书 - 坚强2002  阅读原文»

在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 《The Erlang Runtime System》,其作者happi在2013年3月份公布了这本书的写作计划:"The plan is to have the book done by the end of 2013 and published early 2014. ",出版方是O’Reilly,按照O’Reilly近一两年的管理,都会有电子版(PDF epub)的版本,所以我们还是有机会在较早的时机看到这本书.

I have been programming for fun since 1980, and for profit since 1989 when I started my first company. I have been working on native code compilation of Erlang, with the implementation of Scala, on virtual machines, and with internet scale online payment solutions. Currently I am writing a book on the Erlang Runtime System (ERTS).

这本书的作者真的是前辈,他老人家写代码的时候我还没有出生, 而且按照他的功力,这本书应该会非常有料,看下目录:

  1. Introduction
  2. The Compiler
  3. Processes and the PCB
  4. The Erlang Virtual Machine: BEAM
  5. Modules and The BEAM File Format
  6. Scheduling
  7. The Erlang Type System and Tags
  8. The Memory Subsystem: Stacks, Heaps and Garbage Collection
  9. Advanced data structures (ETS, DETS, Mnesia)
  10. Different Types of Calls, Linking and Hot Code Loading
  11. BEAM Instructions (25p)
  12. Platform Independence
  13. IO, Ports and Networking
  14. BIFs NIFs and Linked in Drivers
  15. Native code/li>
  16. Building ERTS
  17. The Shell
  18. Operation and maintenance
  19. Crash dumps
  20. The Debugger
  21. Tracing and Profiling
  22. Tweaking and optimizing

应该说,这本书出版又填补了Erlang图书的一个空白,过去的一两年中,专门讲Erlang语言,OTP实践,Web开发的书都出了,甚至还有些面向初学者的练习书也出版了;而唯独讲Erlang 底层机制实现的书没有出现,这些资料散见于各种论文,博客,没有一本书系统的梳理这方面的知识;之前淘宝褚霸好像有意向出一本Erlang系统优化的书,不过考虑到性能测试依赖的硬件条件和软件的更新,信息时效性是一个巨大的挑战,这个计划就放弃了,现在霸爷在翻译LYSE.

另外一本书,依然是出自O’Reilly手笔:《Designing for Scalability with Erlang/OTP Implementing Robust, Fault-Tolerant Systems》

Implementing Robust, Fault-Tolerant Systems

这本可不是小册子,作者还是大咖Francesco Cesarini, Simon Thompson, Robert Virding,400页的篇幅.从名字和篇幅来看,这本书将给我们带来实战经验分享.这本书的发布日期是六月份,换句话说我们可以在六七月份看到这本书的电子版.

非常期待能有国内的出版社能够拿到这两本书的影印版版权,一定会支持正版.

[0] 第一本 http://stenmans.org/happi_blog/?p=173

[1] 第二本 http://shop.oreilly.com/product/0636920024149.do


本文链接:http://www.cnblogs.com/me-sa/p/erlang_new_books.html,转载请注明。

JavaScript异步编程原理 - BarretLee  阅读原文»

众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着。在事件队列中加一个延时,这样的问题便可以得到缓解。

A: 嘿,哥们儿,快点!
B: 我要三分钟,你先等着,完了叫你
~
A: 好的,记得叫我啊
~ 你(C)也等着吧,完了叫你~
C: 嗯!
...

告诉后面排队的人一个准确的时间,这样后面的人就可以利用这段时间去干点别的事情,而不是所有的人都排在队列后抱怨。我写了一段程序来解决这个问题:

/**
* @author Barret Lee
* @email barret.china@gmail.com
* @description 事件队列管理,含延时
*/
var Q = {
// 保存队列信息
a: [],
// 添加到队列 queue
q: function(d){
// 添加到队列如果不是函数或者数字则不处理
if(!/function|number/.test(typeof d)) return;

Q.a.push(d);
// 返回对自身的引用
return Q;
},
// 执行队列 dequeue
d: function(){
var s = Q.a.shift();
// 如果已经到了队列尽头则返回
if(!s) return;

// 如果是函数,直接执行,然后继续 dequeue
if(typeof s === "function") {
s(), Q.d();
return;
}

// 如果是数字,该数字作为延迟时间,延迟 dequeue
setTimeout(function(){
Q.d();
}, s);
}
};

这段程序加了很多注释,相信有 JS 基础的童鞋都能够看懂,利用上面这段代码测试下:

// 进程记录函数
function record(s){
var div = document.createElement("div");
div.innerHTML
= s;
console.log(s);
document.body.appendChild(div);
}

Q
.q(
function(){
record(
"0 <i style='color:blue'>3s 之后搞定,0 把 1 叫进来</i>");
})
.q(
3000) // 延时 3s
.q(function(){
record(
"1 <i style='color:blue'>2s 之后搞定,1 把 2 叫进来</i>");
})
.q(
2000) // 延时 2s
.q(function(){
record(
"2 <span style='color:red'>后面没人了,OK,厕所关门~</span>");
})
.d();
// 执行队列

可以戳戳这个 DEMO
也可以直接运行这段程序:

/**
* @author Barret Lee
* @email barret.china@gmail.com
* @description 事件队列管理,含延时
*/
var Q = {
// 保存队列信息
a: [],
// 添加到队列 queue
q: function(d){
// 添加到队列如果不是函数或者数字则不处理
if(!/function|number/.test(typeof d)) return;

Q.a.push(d);
// 返回对自身的引用
return Q;
},
// 执行队列 dequeue
d: function(){
var s = Q.a.shift();
// 如果已经到了队列尽头则返回
if(!s) return;

// 如果是函数,直接执行,然后继续 dequeue
if(typeof s === "function") {
s(), Q.d();
return;
}

// 如果是数字,该数字作为延迟时间,延迟 dequeue
setTimeout(function(){
Q.d();
}, s);
}
};

function record(s){
var div = document.createElement("div");
div.innerHTML
= s;
console.log(s);
document.body.appendChild(div);
}
Q
.q(
function(){
record(
"0 <i style='color:blue'>3s 之后搞定,0 把 1 叫进来</i>");
})
.q(
3000)
.q(
function(){
record(
"1 <i style='color:blue'>2s 之后搞定,1 把 2 叫进来</i>");
})
.q(
2000)
.q(
function(){
record(
"2 <span style='color:red'>后面没人了,OK,厕所关门~</span>");
})
.d();

本文地址:http://www.cnblogs.com/hustskyking/p/javascript-asynchronous-programming.html,转载请注明出处。

一、Javascript 异步编程原理

显然,上面这种方式和银行取号等待有些类似,只不过银行取号我们并不知道上一个人需要多久才会完成。这是一种非阻塞的方式处理问题。下面来探讨下 JavaScript 中的异步编程原理。

1. setTimeout 函数的弊端

延时处理当然少不了 setTimeout 这个神器,很多人对 setTimeout 函数的理解就是:延时为 n 的话,函数会在 n 毫秒之后执行。事实上并非如此,这里存在三个问题,一个是 setTimeout 函数的及时性问题,可以测试下面这串代码:

var d = new Date, count = 0, f, timer;
timer
= setInterval(f =

没有评论:

发表评论