理解JS与多线程

理解JS与多线程

什么是四核四线程?

一个CPU有几个核它就可以跑多少个线程,四核四线程就说明这个CPU同一时间最多能够运行四个线程,四核八线程是使用了超线程技术,使得单个核像有两个核一样,速度比四核四线程有多提升。

由于四核四线程的CPU同一时间只能运行四个线程,所以有些线程会处于运行状态,而大部分的线程会处于中断、堵塞、睡眠的状态,所以这里就涉及操作系统的任务调度。

OS的任务调度

  1. Linux进程分类

    1)交互式进程:需要有大量的交互(如vi编译器,大部分时间处于休眠状态,但是要求响应要快。)

    2)批处理进程:运行在后台(如编译程序,需要占用大量的系统资源,可以慢点。)

    3)实时进程:需要立即响应并执行(如视频播放器软件,它的优先级最高。)

  2. 任务调度方式

    常用的有以下两种:

    1)SCHED_FIFO:实时进程,它的优先级最高,直到执行完了,才执行下一个实时进程。

    2)SCHED_RR:对于普通线程使用时间片轮询,每个线程分配一个时间片,当前线程用完这个时间片,没有执行完的就排到当前优先级一样的线程队列队尾。

HTML5引入了Web Workers,让JS支持线程。

JS的多线程是OS级别的

JS的多线程是真的多线程,也就是说JS的多线程是调用系统API创建的多线程。

还有一种多线程是用户级别的多线程,这种多线程并不会产生实际的系统线程,它是应用程序自己控制任务切换的。

一般操作系统线程是有限制的,开太多,页面就挂了。

线程同步

线程同步主要是靠锁来实现的。锁可以分成三种。

  1. 互斥锁

    一块代码被锁住了,只要执行完了才能释放这把锁,其他线程运行到这里的时候也要去申请那把锁,由于这把锁没有被释放,所以它就堵塞在那里了,只要等到锁被释放了,它才能拿到这把锁再继续加锁。

    互斥锁使用太多会导致性能下降,因为线程堵塞在那里它要不断查那个锁能不能用,所以要占用CPU。

  2. 读写锁

    如果只要有一个线程在读可以同时读,但是不允许有一个线程进行写入;同理只要有一个线程在写,另外的线程就不能读。

  3. 条件变量

    条件变量是为了解决生产者和消费者的问题,由于互斥锁和读写锁会导致线程一直堵塞在那里占用CPU,而使用信号通知的方式可以先让堵塞的线程进入睡眠状态,等生产者生产出东西后通知消费者,唤醒它进行消费。

JS没有线程同步的概念

JS的多线程无法操作DOM,没有window对象,每个线程的数量都是独立的。主线程传给子线程的数据是通过拷贝复制,同样的子线程给主线程的数据也是通过拷贝复制,而不是共享同一块内存区域。

JS的单线程模型

function fn(){
    // 需要执行20ms
}
function fn1(){
    var fn3 = function(){};
    setTimeout(fn3,0);
    fn();
}
function fn2(){
    fn();
    var fn4 = function(){};
    setInterval(fn4,20);
    fn();
}

在这里插入图片描述

在主逻辑里面的fn1和fn2的调用是连在一起的,它是一个执行单元,要么还没执行,要么得一口气执行完,执行完之后,再执行setTimeout后面的。由于已经超过setInterval定的20ms,所以又马上执行setInterval的函数fn4.

Node.js的单线程模型

单线程如何处理高并发呢?

由于数据库连接就是多线程,调用操作系统的IO文件读取也是多线程,所以Node.js的异步是借助于数据库和IO多线程。

的单线程模型

单线程如何处理高并发呢?

由于数据库连接就是多线程,调用操作系统的IO文件读取也是多线程,所以Node.js的异步是借助于数据库和IO多线程。

这样的好处是不需要启动新的线程,不需要开辟新线程的空间,不需要进行线程的上下文切换。当服务应用不是计算类型的,使用Node.js可能反而会更快,同时由于是单线程的所以写代码更容易。缺点:不能够提供很耗CPU的服务,如图形渲染,复杂的算法计算等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/784670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Q-Learning实战——找房间

介绍 样例来自A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程) 简单来说就是从某个房间开始,找到去目标房间的路径。 代码实现 import numpy as np from tqdm import tqdm, trangeroom_num 6 room_paths [(0, 4), (3, 4), (3, 1), (1, 5)…

exel带单位求和,统计元素个数

如果exel表格中,如果数据有单位,无法直接用 自动求和 直接求和。如下图所示,求和结果为0,显然不是我们想要的。 用下面的公式求和,单位不是“个”的时候记得替换单位。统计范围不是“C1:C7”也记得换一下啊&#xff01…

19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法

1.1 简介 GoogLeNet(有时也称为GoogleNet或Inception Net)是一种深度学习架构,由Google的研究团队在2014年提出,主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛(ILSVRC&#xf…

实用性提升百分之一百!!!【ONLYOFFICE 8.1版本】全方位深度性能测评

目录 【ONLYOFFICE 8.1 版本】全方位深度性能测评 一、界面与用户体验 二、文字处理功能 表格处理功能 演示文稿功能 协作与共享功能 性能与稳定性 总结 【ONLYOFFICE 8.1 版本】全方位深度性能测评 在当今数字化办公的时代,办公软件的选择对于提高工作效率和…

【HTML入门】第四课 - 换行、分割横线和html的注释

这一小节,我们继续说HTML的入门知识,包括换行、横线分割以及注释(html的注释)。 目录 1 换行 2 分割横线 3 html注释 1 换行 html中分为块元素和行内元素。这一小节呢,先不说这些元素们,我们先说一下换…

安装Gradle

官网文档 https://gradle.org/ 腾讯下载镜像:https://mirrors.cloud.tencent.com/gradle/ 文档:https://docs.gradle.org/current/userguide/userguide.html 命令行文档:https://docs.gradle.org/current/userguide/command_line_interface.…

Python提取视频文案

Python提取视频文案 1、背景描述2、视频转音频3、音频转文字 1、背景描述 在多媒体应用中,视频是一个信息量巨大的载体。然而,有时我们需要从视频中提取语音并转换为文本,以用于文本分析和机器学习训练 其中主要涉及到两个过程:视…

String类(STL开始)

相信大家都知道STL在C中的重要性,作为其模板库中的一部分,包含了常见的数据结构和算法,是C的标准库 而我们今天要讲的String类(String底层是一个字符顺序数组的顺序表对象,可以归类为容器),其实…

MySQL安装时initializing database失败

问题页面: 解决方法: 1.勾选红框中的选项: 2.将下图红框中全部改为英文: 然后一路next就可以了。

洛谷 P3613 学习用map代替大大大数组的好题

题目链接:P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目截图: 题意分析: 非常简单的存入和取出操作 唯一的 “难点” 在于 数组开不到 a[100007][100007],会暴内存 非常巧妙的引入 map 来解决…

广州银行多份招股书数据货不对板:内控风险难平,IPO曲折前行

作者|芋圆 来源|贝多财经 6月29日,广州银行第五次更新了招股说明书。 作为制造业大省的头部城商行,广州银行的发展一直备受关注。拆解可知,广州银行2023年在盈利能力、内控、资本充足性、资产质量等方面的表现,凸显了该行接下来…

Linux三剑客(grep、awk和sed)操作及与管道结合使用

1. 总览 grep、sed和awk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。 Linux三剑客在文件处理中的作用: grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容…

小阿轩yx-Haproxy搭建Web群集

小阿轩yx-Haproxy搭建Web群集 Haproxy 简介 提供高可用性 能做出标准的负载均衡 支持虚拟主机 具备健康检查能力 能用于各式各样的代理 轻量级代理环境 解决方案优势 免费 快速 可靠 特性 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或…

明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named ‘sklearn‘

问题: 明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named sklearn 解决方法: 卸载重新安装一下即可 pip uninstall scikit-learn pip install scikit-learn 成功解决!!&#xff…

高创新 | CEEMDAN-VMD-GRU-Attention双重分解+门控循环单元+注意力机制多元时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 高创新 | CEEMDAN-VMD-GRU-Attention双重分解门控循环单元注意力机制多元时间序列预测 本文提出一种基于CEEMDAN 的二次分解方法,通过样本熵重构CEEMDAN 分解后的序列,复杂序列通过VMD…

【Threejs进阶教程-着色器篇】1. Shader入门(ShadertoyShader和ThreejsShader入门)

ThreejsShader入门 关于本Shader教程认识ShaderShader和Threejs的关系WebGLShaderThreejsShaderShadertoyShader其他Shader 再次劝退数学不好的人从ShaderToy开始Shader的代码是强类型glsl的类型,变量,内置函数,关键字关于uv基于UV的颜色处理…

PCL 点云FPFH特征描述子

点云FPFH特征描述子 一、概述1.1 FPFH概念1.2 基本原理1.3 PFH和FPFH的区别二、代码实现三、结果示例一、概述 1.1 FPFH概念 快速点特征直方图(FPFH)描述子:计算 PFH 特征的效率其实是十分低的,这样的算法复杂度无法实现实时或接近实时的应用。因此,这篇文章将介绍 PFH 的简…

【java web 01】3小时快速学习前端知识(收藏备用)

3小时快速学习前端知识【全栈专用】 一、教程简介1.1 Java 开发为何学Web技术1.2 课程设计1.3 课前准备 二、HTML2.1 Html简介2.1.1 HTML、CSS、JS分别有什么作用2.1.2 什么是HTML2.1.3 什么是标记语言 2.2 Hello,Html2.2.1 HTML基础结构2.2.2 专业词汇2.2.3 语法细…

面试经典150题

合并两个有序数组 两个按非递减顺序排列的整数数组nums1和nums,另有两个整数m和n,分别表示nums1和nums2中的元素数组。 请合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。 直接合并后排序 class Solution { public:void merge(…