理解JS与多线程

news2024/11/13 20:24:18

理解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.coloradmin.cn/o/1908003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-scrollbar实现自动滚动到底部(AI聊天)

目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板,每次用户输入提问内容或者ai进行流式回答时需要不断的滚动到底部确保展示最新的消息。 实现步骤 采用element ui 的el-scrollbar作为聊天消息展示组件。 通过操作dom来实…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…

挑战全网最清晰解决文本文件乱码方案

标题 文本文件出现乱码之全网最清晰解决方案乱码出现的原因解决方案第一步:获取文件的原始编码格式。第二步,获取当前系统的格式第三步,将文件的内容以当前系统编码格式进行译码并且输出到新的文件中第四步,删除原文件&#xff0c…

韦东山嵌入式linux系列-LED驱动程序

之前学习STM32F103C8T6的时候,学习过对应GPIO的输出: 操作STM32的GPIO需要3个步骤: 使用RCC开启GPIO的时钟、使用GPIO_Init函数初始化GPIO、使用输入/输出函数控制GPIO口。 【STM32】GPIO输出-CSDN博客 这里再看看STM32MP157的GPIO引脚使用…

【智能算法改进】多策略改进的蜣螂优化算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜣螂优化算法(DBO)原理及实现 2.改进点 混沌反向学习初始化 采用 Pwlcm 分段混沌映射,由于 Pwlcm 在其定义区间上具有均匀的密度函数,在特定的…

windows电脑桌面便签在哪里找?

在忙碌的工作中,我们经常会有很多事情需要记住。这时,电脑桌面便签就成为了我们的好帮手。那么,在Windows电脑上,我们该如何找到桌面便签呢?下面,就让我来为大家详细介绍一下。 其实,Windows电…

Android多开应用软件系统设计

设计一个支持Android多开应用的软件系统,主要涉及到以下几个关键技术点和设计考虑: 1. 虚拟化技术 容器技术:与传统的虚拟机不同,可以采用更轻量级的容器技术,为每个应用实例创建独立的运行环境。这包括分配独立的用…

【CUDA】shuffle算法的一个优化

最近,笔者在阅读这篇文章时很好奇,为什么使用看起来高大上的shuffle算法之后,并没有造成优化反而有了负优化,想到了一个可以优化的地方:在最后针对一个warp进行处理时,当前block中不在第一个warp中的线程会…

【Linux】进程间通信——匿名管道

为什么要进行进程间通信? 1.数据传输:一个进程需要将它的数据发送给另一个进程,比如我们有两个进程,一个负责获取数据,另一个负责处理数据,这时第一个进程就要将获取到的数据交给第二个进程 2.资源共享&…

职业理念教育观

职业道德理念——教育观 教育是什么、干什么、为了什么,教育心该培养什么样的人、如何培养人等。 教育观 素质教育内涵 教学观 素质教育内涵 新课程改革的教学观

4.Python4:requests

1.requests爬虫原理 (1)requests是一个python的第三方库,主要用于发送http请求 2.正则表达式 #正则表达式 import re,requests str1aceace #A(.*?)B,匹配A和B之间的值 print(re.findall(a(.*?)e,str1))import re,requests str2hello com…

背包问题转换

如何转换成背包问题呢&#xff0c;我们可以把每个质数当成一个重量 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;#define int long long int record[1005]; void fun() {//record[2] 1;for (int i 2; i < 1000; i) {if (!record[…

微信视频号及直播回放下载工具

最近需要下载微信视频号中的视频&#xff0c;找一圈&#xff0c;终于找到了&#xff0c;&#xff0c;免费&#xff0c;没广告 软件叫做&#xff1a;爱享素材下载器。 是一款开源的、完全免费的工具。 第1步&#xff1a;下载安装包 下载地址&#xff1a; https://github.com/p…

jmeter+ant+jenkins搭建 接口自动化测试平台

平台搭建 &#xff08;1&#xff09;录制jmeter脚本 &#xff08;2&#xff09;将jmeter的安装目录下的G:\jmeter\apache-jmeter-5.1.1\extras中&#xff0c;将 ”ant-jmeter-1.1.1.jar”文件放到 ant的lib目录下 &#xff08;3&#xff09;配置jmeter的xml配置文件&#xf…

python对象

类 我们目前所学习的对象都是Python内置的对象但是内置对象并不能满足所有的需求&#xff0c;所以我们在开发中经常需要自定义一些对象类&#xff0c;简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象类就是对象的图纸&#xff01;我们也称对象是类的实例&#…

【第22章】MyBatis-PlusSQL分析与打印

文章目录 前言一、p6spy简介二、示例工程1. 依赖引入2. 配置 三、Spring Boot集成1. 依赖2. 配置3. 注意事项 四、实战1. 依赖2. 配置(spy.properties)3. 配置类4. 测试类5. 结果 总结 前言 MyBatis-Plus提供了SQL分析与打印的功能&#xff0c;通过集成p6spy组件&#xff0c;可…

电脑找回彻底删除文件?四个实测效果的方法【一键找回】

电脑数据删除了还能恢复吗&#xff1f;可以的&#xff0c;只要我们及时撤销上一步删除操作&#xff0c;还是有几率找回彻底删除文件。 当我们的电脑文件被彻底删除后&#xff0c;尽管恢复的成功率可能受到多种因素的影响&#xff0c;但仍有几种方法可以尝试找回这些文件。本文整…

白帽工具箱:DVWA中CSRF攻击与防御的入门指南

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

镜舟科技:国产数据库角逐金融赛道,开年斩获数家银行订单

在国产数据库领域&#xff0c;镜舟科技正迅速崛起&#xff0c;成为一匹瞩目的基础数据技术黑马。 开年伊始&#xff0c;镜舟科技便成功斩获中信银行、南京银行、某股份制银行、某头部民营银行、某大型综合类券商以及某消费金融公司等多家金融企业订单&#xff0c;其锚定需求匹…