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


  • 相关阅读:
    java注解说明
    paypal
    eclispe查看jdk源码后特别卡顿导致未响应解决
    ubuntu+tomcat,多环境、自动化部署脚本,git+maven+tomcat+ubuntu
    ubuntu+let's encrypt生成永久免费https证书 ubuntu+tomcat+nginx+let's encrypt
    MySQL创建数据库与创建用户以及授权
    linux查找并杀死进程shell
    redmine安装笔记
    C#动态获取本机可用串口的两种方式
    C# 控件缩写规范
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467017.html
Copyright © 2011-2022 走看看