进程(process) 和 线程 (thread)

本文介绍了计算机中的进程和线程概念,特别关注JavaScript引擎线程及其与其他线程的交互。JS引擎线程主要负责执行同步代码,而异步操作如setTimeout、ajax和事件处理由不同的线程处理。当定时器触发或异步操作完成时,回调函数会被放入任务队列等待主线程执行。这种机制确保了GUI渲染不被JS引擎阻塞,维持了浏览器的响应性。
摘要由CSDN通过智能技术生成

一: 什么是进程?

我们可以在电脑的任务管理器中查看到正在运行的程序,就是一个进程,可以理解为一个程序就是一个进程,比如浏览器打开了一个网页就是一个进程,打开了三个网页就是三个进程,一个进程是包含多个线程的,这些线程相互配合,组成网页。

二:线程有哪些?

线程如下:

  • GUI渲染线程
  • js引擎线程
  • EventLoop处理线程
  • 其他线程  比如:

                        1. 定时器线程(setTimeout

                        2. http异步线程(ajax)

                        3. 浏览器事件线程 等等

注意:js语言设定js引擎线程GUI引擎线程互斥的,也就是说GUI引擎在渲染时阻塞js引擎计算

三:js引擎线程

JS 引擎线程,我们把它称为 主线程 ,它是干嘛的?用来运行JS代码的(但是不包括异步代码),比如:

1 var a = 2;

2 console.log();

3 setTimeout();

4 ajax();

第1、4行代码是同步代码,直接在主线程中运行;第2、3行代码交给其他线程运行。

看下图: 

任务队列可以理解为一个静态的队列存储结构,非线程,只做存储,里面存的是一堆异步成功后的回调函数。

四: 其他线程间的不同

主线程把setTimeout、ajax、dom.onclick分别给了其他三个线程,他们之间有些不同

1、对于setTimeout代码,定时器触发线程在接收到代码时开始计时时间到了才将回调函数扔进队列

2、对于ajax代码,http 异步线程立即发起http请求,请求成功后将回调函数扔进队列

3、对于dom.onclick,浏览器事件线程会先监听dom,直到dom被点击了,才将回调函数扔进队列

 

 

 

 

参考链接:https://www.jianshu.com/p/8821c6432fe1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值