zoukankan      html  css  js  c++  java
  • 操作系统、浏览器与js之间的一些概念与联系

    浏览器、操作系统与JavaScript语言的一些知识

    进程与线程

    参考文章:
    阮一峰的网络日志--进程与线程的简单解释

    进程的介绍

    进程(process): 当有应用程序需要启动时,操作系统就会自动启动一个或多个进程来维持整个应用程序的运行,应用程序是运行在进程的线程中的

    进程中的数据是不能够直接共享的

    线程的介绍

    线程(thread): 是进程内的最小单位,同时也是CPU最小的调度单元

    一个进程中, 多个线程内的数据可以共享,但是为了数据的一致性和防止同时操作内存,就会涉及各种锁的概念,这里不过多介绍(其实因为我不会...)

    进程与线程的关系:

    • 一个进程必然有一个线程, 这个线程成为主线程
    • 一个进程可以有多个线程

    这里还要简单介绍一个概念: 线程池(thread pool),它作为一个容器用于保存多个线程,实现线程的反复利用

    比较单线程与多线程

    单线程优点: 代码编写相对简单,不轻易涉及到锁的概念

    单线程缺点: 执行效率低

    多线程优点: 有效地提升CPU的利用率

    多线程缺点:

    • 创建多线程需要有额外的开销
    • 线程间的转换也需要有额外的开销
    • 维持线程同步容易遇到死锁与状态同步问题

    JavaScript是单线程语言

    JavaScript是单线程语言,但是在HTML5中的Web Workers可以多线程运行,但是Web Workers中的子线程不能操作DOM,同时子线程必须受控于主线程,所以本质上JavaScript仍然是一门单线程语言

    浏览器内核

    不同浏览器会使用不同的内核(引擎),内核的好快直接影响的就是浏览器的运行速度

    内核是由多个模块组成的:

    • JS引擎模块: 负责js程序的编译与运行
    • html,css文档解析模块
    • DOM/CSS 模块: 负责DOM/CSS 在内存中的相关处理
    • 布局与渲染模块: 负责将解析好的文档树和效果绘制到浏览器页面中
    • 定时器模块: 负责定时器的管理
    • 事件相应模块: 负责各种事件的管理
    • 网络请求模块: 负责http、ajax等网络请求
  • 相关阅读:
    2016第5周四
    2016第5周三
    2016第5周二
    HTTP2.0那些事
    2016第4周日
    【C语言的日常实践(十二)】命令行参数
    Oracle改变字段类型
    Codeforces Round #269 (Div. 2)
    linux shell 命令
    Codeforces Round #256 (Div. 2) C. Painting Fence 或搜索DP
  • 原文地址:https://www.cnblogs.com/fitzlovecode/p/Miscellaneous-talk.html
Copyright © 2011-2022 走看看