在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).
这本书的作者真的是前辈,他老人家写代码的时候我还没有出生, 而且按照他的功力,这本书应该会非常有料,看下目录:
- Introduction
- The Compiler
- Processes and the PCB
- The Erlang Virtual Machine: BEAM
- Modules and The BEAM File Format
- Scheduling
- The Erlang Type System and Tags
- The Memory Subsystem: Stacks, Heaps and Garbage Collection
- Advanced data structures (ETS, DETS, Mnesia)
- Different Types of Calls, Linking and Hot Code Loading
- BEAM Instructions (25p)
- Platform Independence
- IO, Ports and Networking
- BIFs NIFs and Linked in Drivers
- Native code/li>
- Building ERTS
- The Shell
- Operation and maintenance
- Crash dumps
- The Debugger
- Tracing and Profiling
- Tweaking and optimizing
应该说,这本书出版又填补了Erlang图书的一个空白,过去的一两年中,专门讲Erlang语言,OTP实践,Web开发的书都出了,甚至还有些面向初学者的练习书也出版了;而唯独讲Erlang 底层机制实现的书没有出现,这些资料散见于各种论文,博客,没有一本书系统的梳理这方面的知识;之前淘宝褚霸好像有意向出一本Erlang系统优化的书,不过考虑到性能测试依赖的硬件条件和软件的更新,信息时效性是一个巨大的挑战,这个计划就放弃了,现在霸爷在翻译LYSE.
另外一本书,依然是出自O’Reilly手笔:《Designing for Scalability with Erlang/OTP 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 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着。在事件队列中加一个延时,这样的问题便可以得到缓解。
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 函数的及时性问题,可以测试下面这串代码:
timer = setInterval(f =
没有评论:
发表评论