进程与线程 事件循环 同步,异步任务 宏任务与微任务

进程:

        程序的一次执行,他占有一片独有的内存空间,可以通过windows任务管理器查看进程

线程:

        是进程的一个独立执行单元,是程序执行的一个完整流程,是cpu最小的调度单元

相关知识:应用程序必须运行在某个进程的某个线程上

                  一个进程中至少有一个运行的线程,主线程,进程启动后自动创建

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

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

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

                  线程池:保存多个线程对象的容器,实现线程对象的反复利用

多进程与多线程

        多进程:一应用程序可以同时启动多个实例运行

        多线程:在一个进程内同时有多个线程运行

问题1:定时器是不是定时执行?(经典面试题)

        * 定时器并不能保证真正定时执行

        * 一般会延迟一点(可以接受),也有可能延迟很长时间(不能接受) 

console.log('执行定时器前');
setTimeout(function (){
  console.log('定时器执行');
},2000)
console.log('执行定时器后');

结果是:并不像所设想的在定时器执行后才console.log('执行定时器后')

实际上该时间是将该回调函数推到任务队列的时间。如果队列中没有其他任务则执行,否则会将向后延长

问题2:定时器是不是在分线程执行?

        * 在主线程执行的,JS是单线程的

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

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

        * JS为什么采用单线程模式,而不用多线程模式

                * JavaScript的单线程,与他的用途有关

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

                * 这决定他是可以是单线程的,否则会带来很复杂的同步问题

问题3:定时器是如何执行的?

        * 事件循环模型

同步任务:同步任务都在主线程上执行,形成一个执行栈

异步任务:JS的异步是通过回调函数实现的

一般来说,异步任务有以下类型:

1.普通事件,如click,resize等

2.资源加载,如load,error等

3.定时器,包括setInterval,setTimeout等

异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)

 JS执行机制

1.先执行执行栈中的同步任务

2.异步任务(回调函数)放入任务队列中

3.一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

在异步模式下,创建异步任务主要分为宏任务与微任务两种。ES6 规范中,宏任务(Macrotask) 称为 Task, 微任务(Microtask) 称为 Jobs。宏任务是由宿主(浏览器、Node)发起的,而微任务由 JS 自身发起。

下面是一个文章的链接,详细介绍了宏任务与微任务的执行顺序并且有执行图,必看

http://events.jianshu.io/p/fd15db94a034
 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:1. 用户接口和操作系统接口;2. 系统调用是操作系统的一种服务接口,用于控制外部设备和程序的执行;3. 内核是一种类似操作系统的软件模块,它在用户和操作系统之间提供桥梁;4. 内核是一种架构,其中内核本身提供少量功能,而其他功能由独立的模块提供。 ### 回答2: 2. 系统调用:系统调用是用户程序与操作系统之间的接口,用户可以通过系统调用向操作系统发出请求,以获取操作系统提供的功能和资源。操作系统提供了一系列系统调用,例如文件操作、进程管理、内存分配等,用户程序可以通过调用这些系统调用来实现相应的功能。 3. 内核:内核是一种设计思想,它将操作系统的核心功能集成在一个庞大的内核中。内核拥有较为完整的功能和较高的性能,因为所有的系统调用和内核功能都在一个内核中,可以直接访问内核数据结构,无需进行进程切换。但是由于内核庞大复杂,内核更容易产生错误和安全漏洞,并且扩展性差,对于动态加载和卸载模块的支持相对较弱。 4. 内核:内核是一种与内核相反的设计思想,它将操作系统的核心功能进行最小化的划分,只保留最基本的功能(如进程管理、内存管理),将其他功能以服务的形式移出内核,并在用户态运行。内核本身较为简单,功能较少,因此更加稳定和可靠。内核的优点是模块化开发,可以进行灵活的功能扩展和定制,同时具有更好的可移植性和可维护性。但是由于服务间的通信需要在用户态和内核态之间频繁切换,性能上可能有所损失。 ### 回答3: 2. 系统调用: 系统调用是用户程序与操作系统之间的接口。当用户程序需要操作系统提供的服务或资源时,它会通过系统调用来请求操作系统执行相应的操作。系统调用提供了一种受控的方式,使得用户程序能够以安全和可靠的方式使用操作系统的功能。用户程序通过调用特定的系统调用函数来向操作系统发出请求,并且可以传递参数给系统调用函数。操作系统在收到系统调用请求后,会执行相应的操作,并返回结果给用户程序。 3. 内核: 内核是一种操作系统的设计架构,它将操作系统的大部分功能实现为一个单独的庞大的内核。内核将多种操作系统功能,包括进程管理、文件系统、设备驱动程序等都集成在一个内核中。内核的设计简单,具有较高的性能,因为系统调用的开销较小,且各个模块之间的交互效率很高。但是,内核的缺点是内核较为庞大,可靠性差,存在一个模块的错误可能会影响整个系统的问题。 4. 内核: 内核是一种操作系统的设计架构,它将操作系统的核心功能进行了最小化的精简。内核只实现了基本的功能,如进程间通信、内存管理和调度等。其他的系统服务,如文件系统、设备驱动器等,被实现为用户级的服务,运行在内核之上。内核的设计目标是提高系统的可靠性和可维护性。因为内核比较小巧,内核部分较为稳定,而系统服务可以在用户空间中运行,造成错误的机会更小。内核的缺点是系统调用的开销较大,因为需要在内核空间和用户空间之间进行频繁的切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值