zoukankan      html  css  js  c++  java
  • JavaScript单线程的疑问与解答

    问:

    JavaScript是单线程的,有任务队列,比如使用setTimeou(func,secs)来在secs毫秒后向任务队列添加func。但是,setTimeout后面跟一个死循环,那么死循环导致任务被阻塞,也就是说func不能执行。
    我想请教一下:死循环在执行的时候,secs毫秒过去的时候,func是否被添加到任务队列中?如果添加了,但JS是单线程的,不是在这个线程中添加的,那在哪里被添加的?求大神解答下,找乐很多东西,都是和JavaScript高级程序设计上的说法一样.
    答:

    原因是 JS 是单线程的,但是浏览器是多线程的,甚至是多进程的。
    所以,同一个标签页,只有一个解释器。可能iframe有多个吧。。。
    添加维护是其他线程干的事,执行是单线程解释器干的事。
    就如同Java,有反射机制吧,window 是一个 host宿主对象,也就是他自身使用 C语言实现的,不在 JS的解释器线程控制之内,只是进行交互,所以。。。 你明白了吧,逻辑上JS是单线程,但实际上有很多个其他的线程在辅助这个解释器。
    实现细节上只要能保证单线程的逻辑完整性就行了


    关于句柄 handler的一些理解:

    句柄。handler,其实这个词翻译的挺形象的,虽然不太好理解。
    你可以理解成电视机的遥控器,遥控器在手,就相当于获取了电视机这个对象,想让电视机干什么,那就操作这个“电视机对象” 即可。
    持久化,一般来说就是指存到数据库;在内存里,就不叫持久化。重启后还存在,那就是持久化了。


  • 相关阅读:
    windows 开发 数据模版 Itemtemp
    windows 8 获取用户账号信息
    从客户端中检测到有潜在危险的 Request.Form 值解决方法
    asp.net异步处理
    知道web.config 中的 urlMappings怎么用?
    .net c#日期时间函数大全
    设计模式学习心得之工厂类模式(一)简单工厂模式
    远程网页内容抓取
    TreeView数据绑定的方法(1)
    URLRewriter.dll asp.net伪静态
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467017.html
Copyright © 2011-2022 走看看