理解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.rhkb.cn/news/372405.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vivado FFT IP核使用

1. 今日摸鱼任务 学习Vivado FFT IP核的使用 Vivado_FFT IP核 使用详解_vivado fft ip核-CSDN博客 这篇写的很详细啦 简单做一点笔记进行记录 2. FFT IP核 xfft_0 ff (.aclk(aclk), // input wire aclk.aresetn(aresetn)…

C++编译链接原理

从底层剖析程序从编译到运行的整个过程 三个阶段 一、编译阶段二、链接阶段三、运行阶段 为了方便解释,给出两端示例代码,下面围绕代码进行实验: //sum.cpp int gdata 10; int sum(int a,int b) {return ab; }//main.cpp extern int gdata…

Java基础---复习01

main方法 一个程序有且只有一个main方法,main方法是java程序的唯一入口。 修饰符 修饰类修饰方法修饰域public都可以访问都可以访问private私有类只能本类只能本类protected子类可以继承、访问,同包下的类也可以访问子类可以继承、访问,同…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型,旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型,展现出…

暑期备考2024小学生古诗文大会:吃透真题和知识点(持续)

2024年上海市小学生古诗文大会的自由报名初赛将于10月19日(星期六)正式开始,还有3个多月的时间。 为帮助孩子们备考,我持续分享往年上海小学生古诗文大会真题,这些题目来自我去重、合并后的1700在线题库,每…

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下,挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前,Blender与KeyShot作为业界领先的全能渲染解决方案,广受推崇。它们虽皆能创造出令人信服的逼真视觉效果,但在特色功能上各有所长。本篇文章旨在…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习?二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习? 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到使用算…

华为HCIP Datacom H12-821 卷30

1.单选题 以下关于OSPF协议报文说法错误的是? A、OSPF报文采用UDP报文封装并且端口号是89 B、OSPF所有报文的头部格式相同 C、OSPF协议使用五种报文完成路由信息的传递 D、OSPF所有报文头部都携带了Router-ID字段 正确答案:A 解析: OSPF用IP报…

游戏AI的创造思路-技术基础-决策树(1)

决策树,是每个游戏人必须要掌握的游戏AI构建技术,难度小,速度快,结果直观,本篇将对决策树进行小小解读~~~~ 目录 1. 定义 2. 发展历史 3. 决策树的算法公式和函数 3.1. 信息增益(Information Gain&…

无线网卡怎么连接台式电脑?让上网更便捷!

随着无线网络的普及,越来越多的台式电脑用户希望通过无线网卡连接到互联网。无线网卡为台式电脑提供了无线连接的便利性,避免了有线网络的束缚。本文将详细介绍无线网卡怎么连接台式电脑的四种方法,包括使用USB无线网卡、内置无线网卡以及使用…

终于搞定了通过两路蓝牙接收数据

一直想做无线传感器,通过蓝牙来接收数据,无奈因为arduino接收串口数据的一些问题,一直搁到现在。因为学校里给学生开了选修课,所以手边有一些nano和mega可以使用,所以就做了用两个nano加上两个蓝牙模块来发射数据&…

群体优化算法---文化算法介绍,求解背包问题

介绍 文化算法(Cultural Algorithm, CA)是一种基于文化进化理论的优化算法,首次由Robert G. Reynolds在20世纪90年代提出。文化算法通过模拟人类社会中的文化进化过程,利用个体与群体的双重进化机制来解决优化问题。其基本思想是…

动态数据库设计

动态数据库设计是一种灵活的方法,用于构建能够适应不断变化的数据需求的数据库结构。它强调在不频繁修改数据库表结构的前提下,有效管理和存储多样化的数据。以下是实现动态数据库设计的一些关键技术点和策略: 实体-属性-值(EAV&a…

Java的面向对象基础

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.面向过程和面向对象2.访问限定符3.类和对象基础3.1.类的定义3.2.…

【安全设备】下一代防火墙

一、什么是防火墙 防火墙是一个网络安全产品,它是由软件和硬件设备组合而成,在内网和外网之间、专用网与公共网之间的一种保护屏障。在计算机网络的内网和外网之间构建一道相对隔离的保护屏障,以达到保护资料的目的。它是一种隔离技术&#…

Qt 线程 QThread类详解

Qt 线程中QThread的使用 在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个…

【操作系统】进程管理——进程的同步与互斥(个人笔记)

学习日期:2024.7.8 内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法 进程同步与互斥的概念和意义 为什么要有进程同步机制? 回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征&am…

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。 什么是 IP 地址? 首先&am…

JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)

文章目录 官方文档JSON介绍JSON快速入门JSON对象和字符串对象转换应用案例注意事项和细节 JSON在java中使用说明JSON在Java中应用场景应用实例1.3.3 Map对象和JSON字符串转换 2. Ajax介绍2.1 Ajax应用场景2.2 传统的web应用-数据通信方式2.3 Ajax-数据通信方式2.4 Ajax文档使用…

百度云智能媒体内容分析一体机(MCA)建设

导读 :本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂,采用人工的方式对视频进行分析处理,面临着效率低、成本高的困难。于是,MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术,为用户提供音视…