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


  • 相关阅读:
    数组和链表
    IAP升级
    使用Git和Github来管理自己的代码和笔记
    Eeprom和Flash的区别
    程序员的七种武器
    数据结构和算法的关系
    STVD、IAR两种编译器比较
    STM32与STM8操作寄存器的区别
    Linux用户身份与文件权限
    地图缩放到指定经纬度
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467017.html
Copyright © 2011-2022 走看看