要求:
JavaScript是单线程的,有任务队列。比方使用setTimeou(func,secs)来在secs毫秒后向任务队列加入func。可是,setTimeout后面跟一个死循环,那么死循环导致任务被堵塞,也就是说func不能运行。 我想请教一下:死循环在运行的时候,secs毫秒过去的时候,func是否被加入到任务队列中?假设加入了,但JS是单线程的,不是在这个线程中加入的,那在哪里被加入的?求大神解答下,找乐非常多东西,都是和JavaScript高级程序设计上的说法一样.
答:
原因是 JS 是单线程的。可是浏览器是多线程的。甚至是多进程的。 所以。同一个标签页,仅仅有一个解释器。可能iframe有多个吧。。。 加入维护是其它线程干的事,运行是单线程解释器干的事。 就如同Java,有反射机制吧,window 是一个 host宿主对象。也就是他自身使用 C语言实现的。不在 JS的解释器线程控制之内,仅仅是进行交互。所以。。。 你明确了吧,逻辑上JS是单线程,但实际上有非常多个其它的线程在辅助这个解释器。 实现细节上仅仅要能保证单线程的逻辑完整性即可了
关于句柄 handler的一些理解:
句柄。 handler,事实上这个词翻译的挺形象的,尽管不太好理解。 你能够理解成电视机的遥控器,遥控器在手。就相当于获取了电视机这个对象,想让电视机干什么。那就操作这个“电视机对象” 即可。 持久化,一般来说就是指存到数据库;在内存里,就不叫持久化。 重新启动后还光临。那是的持久性。
版权声明:本文博主原创文章,博客,未经同意不得转载。
时间: 2024-11-15 05:09:09