写不出什么有深度的文章,仅当笔记吧。
几行代码:
<script type=”text/javascript”>
<!–
while(!window.loaded){
//alert(‘loading’);
}
//alert(‘loaded’);
–>
</script>
上述代码与常用的window.onload=function(){}理论上会实现一样效果,等待页面加载完成后执行后续操作。然而实际的运行过程中,这种方法会导致浏览器暂停响应或假死,不知你是否有遇到过在gmail加载数据过程中,偶尔也会有短暂的假死(使用buzz时尤为明显),无法对用户行为作出响应,也说明了js语言并不具备多线程的处理机制。
也许为了弥补单线程环境中的不足,javascript引入了诸如onclick()、onmouseover()、setTimeOut(),setInterval(),ajax异步请求处理函数等回调机制,回调机制类同操作系统中的中断响应,在发生异步事件时,CPU暂停执行当前程序转向其它的相应事件处理程序,待处理完毕后又返回到原来被中断处继续执行或调度新的执行过程。回调机制则利用了“延时中断”,js引擎在“预处理”回调函数时,加入一个延时中断信号,待触发回调函数时回到中断处执行。
模拟出来的多线程:
<script type=”text/javascript”>
<!–
function threadA(){
//do something
}
function threadA(){
//do something
}
setInterval(threadA,100);
setInterval(threadB,100);
–>
</script>
上述代码使用setInterval()函数,设置一个足够短的时间片间隔,模拟出轮换执行的两个”线程”threadA,threadB,虽然并不是真正意义上的多线程,却可以达到两个“线程”交替执行的效果。(如jsthread,一个允许JavaScript进行多线程编程的库)
以上大概就是自己一直把js多线程搞混的原因吧,虽然还是懵懂状态,但多少对其机制有了进一步了解,js很强大但也比较难掌握,有误解的地方还希望高手指正。