js进线程 同异步 阻塞

js异步和同步、阻塞和非阻塞、进程和线程的总结

1.什么是单线程和多线程

在编程语言中,有的语言是多线程的,有的是单线程的,比如java就是多线程的javascript是单线程的。 也就是说js就像一条流水线,只能在这仅仅一条流水线上干活,不能开辟多个线程;而Java可以通过类继承在开辟个进程。

2.进程和线程的区别

进程:一个项目运行就表示一个进程,进程是操作系统分配和调度资源的基本单位 进程之间是相互独立。

比如浏览器打开多个选项卡,是典型多进程的项目 每一个选项卡都是一个独立的进程 ,他们之间是相互不影响,一个进程关闭了,不会影响另一个进程。

线程:在一个进程中,包含若干个线程,真正干活的是线程,如工厂--->进程 工人--->线程

3.同步和异步的区分

同步含义是“一起”,异步含义是“一边……一边……”

在编程思想里面理解为:

同步:代码的书写顺序和代码的执行顺序一样

异步:代码的书写顺序和代码的执行顺序不一样 例如:setTimeout() btn.onclick = function(){}

    console.log("start")
    // 先获取button按钮  document文档--->html文档
    var btn = document.getElementById("btn")   // =  赋值运算符  
    // 给按钮注册一个点击事件  btn叫事件源  click叫事件名   function(){} 函数  当事件发生时,做什么
    // 异步代码
    btn.onclick = function(){
        alert("登录成功了....")
    }
    console.log("end")
复制代码

同步、异步执行顺序:(任务一和任务三是同步任务,任务二是异步任务)

总结:一种是同步任务,另一种是异步任务。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"异步任务队列"的任务,只有等主线程任务执行完毕,"异步任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

4.阻塞和非阻塞的区别

总结:同步、异步:只是对于热水壶。普通水壶代表同步;响水壶代表异步。虽然都能干活,但响水壶可以在自己完工之后,提示小杨水开了。

阻塞、非阻塞:仅仅代表小杨,立等的属于阻塞(1,3);干别的事了属于非阻塞(2,4)。

所以在上述同步阻塞、同步非阻塞、异步阻塞、异步非阻塞中,异步非阻塞情况下效率较高。

下面代码属于同步阻塞:

在while循环中一直是死循环,会一直执行循环,下面的任务不能执行,称为同步阻塞。

    console.log(1)  // 同步
    // 死循环
    while(true){    // 同步
        console.log("....")
    }
    console.log(2)   // 同步
复制代码

下面代码是异步非阻塞:

<script>
    console.log("start")
    // 先获取button按钮  document文档--->html文档
    var btn = document.getElementById("btn")   // 
    // 给按钮注册一个点击事件  btn叫事件源  click叫事件名
    // 异步代码
    btn.onclick = function(){
        alert("登录成功了....")
    }
    console.log("end")
    // 说明:代码里面明明顺序是这样的,start,登录成功了....,end
    // 但是我们在执行代码结果是这样的,start,end,当你点击了按钮,那么才打印了登录成功了,

作者:凌晨四点半er
链接:https://juejin.cn/post/6844903850218881038
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 是一门单线程的编程语言,意味着它在任意给定的时刻只能执行一个任务。这是因为 JavaScript 在最初设计时是作为浏览器脚本语言而诞生的,用于操作网页的 DOM(文档对象模型)。 在 JavaScript 中,任务按照它们被调用的顺序执行,这种方式称为同步执行。当一个任务执行时,其他任务必须等待它的完成才能继续执行。这种同步执行的特性可以确保数据的一致性,但也可能导致阻塞,特别是在执行耗时较长的任务时。 为了解决阻塞问题,JavaScript 引入了异步执行的概念。通过异步执行,可以让某些任务在后台执行,而不会阻塞其他任务的执行。常见的异步操作包括网络请求、文件读写和定时器等。在 JavaScript 中,通常使用回调函数、Promise、async/await 等方式来处理异步操作。 回调函数是最早被广泛使用的异步处理方式。通过将一个函数作为参数传递给异步操作,在操作完成后调用该函数来处理结果。然而,使用回调函数嵌套多层会导致代码可读性和维护性的降低,这就是所谓的"回调地狱"问题。 为了解决回调地狱问题,Promise 和 async/await 出现了。Promise 是一种用于处理异步操作的对象,它可以链式调用,避免了回调函数嵌套的问题。而 async/await 是基于 Promise 的语法糖,使异步代码看起来更像同步代码,更易于理解和编写。 总结起来,JavaScript 是单线程的,但通过异步执行可以提高程序的性能和响应速度。同步执行保证了数据的一致性,而异步执行允许在后台处理耗时操作,提高了用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值