寻找这个例子(以及我之前在事件驱动中的知识)。我可以说这两个例程独立并行地运行(因此不会阻止孔程序)。
Exception in thread "main" java.lang.StackOverflowError
at sun.misc.VM.isBooted(VM.java:165)
at java.util.Hashtable.initHashSeedAsNeeded(Hashtable.java:226)
at java.util.Hashtable.<init>(Hashtable.java:263)
at java.util.Hashtable.<init>(Hashtable.java:283)
at java.util.Properties.<init>(Properties.java:143)
at java.util.Properties.<init>(Properties.java:135)
但如果我做出这样的改变:
//....declaration and methods
register_1.on("execut_routine _1", function() { console.log("executed the routine 1"):})
register_2.on("execut_routine _2", function() { console.log("executed the routine 2"):})
第一个触发事件将阻止第二个事件的发生,对吧?如果是这样,我该如何扭转这种影响呢?
答案 0 :(得分:2)
Javascript是一个单线程环境,因此除非您正在执行与输入/输出相关的任务(等待文件系统,调用外部资源等),否则您的代码必须等待其他代码完成。
使用事件驱动的编程样式不可以帮助您解决此问题。
但是,您可以告诉您的代码进入某种“睡眠”状态。模式,它等待其他代码执行,并在事件循环的下一个滴答处再次开始。例如,Node.js使用process.nextTick(fn)
来注册应该在多个tick上执行的代码。
答案 1 :(得分:0)
Javascript [通常]不是一个多线程环境,所以即使在你的第一个例子中,实际情况是它们是串行执行而不是并行执行。可以认为XHR是并行运行的,但它们是作为浏览器的功能运行而不是直接运行Javascript(即网络请求并行运行),但javascript处理程序将始终以串行方式启动。