zoukankan      html  css  js  c++  java
  • 进程与线程

    进程与线程

      1.进程:程序的一次执行, 它占有一片独有的内存空间

      2.线程: CPU的基本调度单位, 是程序执行的一个完整流程

      3.进程与线程

      • 一个进程中一般至少有一个运行的线程: 主线程

      • 一个进程中也可以同时运行多个线程, 我们会说程序是多线程运行的

      • 一个进程内的数据可以供其中的多个线程直接共享

      • 多个进程之间的数据是不能直接共享的

      4.如何查看浏览器是否是多进程运行的呢?

         任务管理器==>进程

    1. 浏览器运行是单线程还是多线程?

         都是多线程运行的

    JS单线程执行

      1.如何证明js执行是单线程的?

      • setTimeout()的回调函数是在主线程执行的

      • 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行

      2.为什么js要用单线程模式, 而不用多线程模式?

      • JavaScript的单线程,与它的用途有关。

      • 作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。

      • 这决定了它只能是单线程,否则会带来很复杂的同步问题

      3.代码的分类:

      • 初始化代码

      • 回调代码

      4.js引擎执行代码的基本流程

      • 先执行初始化代码: 包含一些特别的代码 回调代码(异步执行)

        • 设置定时器

        • 绑定监听

        • 发送ajax请求

      • 后面在某个时刻才会执行回调代码

    事件循环模型

    1. 所有代码分类

      • 初始化执行代码(同步代码): 包含绑定dom事件监听, 设置定时器, 发送ajax请求的代码

      • 回调执行代码(异步代码): 处理回调逻辑

    2. js引擎执行代码的基本流程:

      • 初始化代码===>回调代码

    3. 模型的2个重要组成部分:

      • 事件(定时器/DOM事件/Ajax)管理模块

      • 回调队列

    4. 模型的运转流程

      • 执行初始化代码, 将事件回调函数交给对应模块管理

      • 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中

      • 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行

    H5 Web Workers多线程

    1. H5规范提供了js分线程的实现, 取名为: Web Workers

    2. 相关API

      • Worker: 构造函数, 加载分线程执行的js文件

      • Worker.prototype.onmessage: 用于接收另一个线程的回调函数

      • Worker.prototype.postMessage: 向另一个线程发送消息

    3. 不足

      • worker内代码不能操作DOM(更新UI)

      • 不能跨域加载JS

      • 不是每个浏览器都支持这个新特性

  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/yaokai729/p/11363233.html
Copyright © 2011-2022 走看看