java同步异步的异同_JS基础——同步异步的区别
发布日期:2025-04-02 03:34:25 浏览次数:9 分类:精选文章

本文共 1258 字,大约阅读时间需要 4 分钟。

JavaScript是一种单线程语言,`ereignah起250px; background:#f5f5f5; border:1px solid #ddd; padding:10px; border-radius:4px;">

`` `
` `
` `
` `
`

JavaScript语言是一门“单线程”的语言,

`
`

不像Java语言,类继承Thread再来个thread.start就可以开辟一个线程。

`
`

所以,JavaScript就像一条流水线,仅仅是一条流水线而已,要么加工,要么包装,不能同时进行多个任务和流程。

`
`

“同步”——一下就让人想到“一起”这个词;

`
`

“异步”呢,从字面来看,好像是在不同的(异)的方式上进行操作,

`
`

那让我想想,最常见的“一边...一边...”是否是异步的正确描述?比如‘小明一边吃雪糕一边写作业’,看起来没问题,但实际上这不是正确的异步概念!

`
`

事实上,同步和异步的区别在于在单线程环境下,两个任务的执行顺序不同。

`
`

最基础的异步操作体现在`setTimeout`和`setInterval`函数中。很少有人真正理解它们的异步性,尽管它们能够控制JavaScript的执行顺序,实现任务调度。

`
`

比如说以下代码:

console.log("1");

setTimeout(function() { …… }, 0);

同样是设置延迟时间为0的`setTimeout`函数,其作用是在指定的时间点执行函数的逻辑,但实际上,这些函数会被排队到任务队列中,等待当前执行栈空闲时再被处理。

从运行结果来看,尽管设置了延迟时间为0,依然遵循任务队列的执行顺序,输出结果可能是1, 2, 3, 4, 5,而不是在定时的时间点执行函数的预期顺序。这就解释了为什么尽管延迟时间很短,函数依然会被排队执行。

任务队列的背后是浏览器的事件循环机制。所有同步任务都会在执行栈(Execution Context Stack)中执行,当执行栈空闲时,系统会去读取任务队列(Task Queue),逐个取出事件并从中获取相应的回调函数,执行这些异步任务。

要理解事件循环,我们需要认识到浏览器的主线程无法同时处理多个任务,它会将所有耗时操作排队。当处理完同步任务后,主线程会去处理任务队列中的事件。这就形成了JavaScript的单线程异步调度机制,确保程序不会因为某个操作长时间卡住,而忘记处理其他重要的任务。

从任务队列来看,除了网络操作的回调函数之外,还有其他类型的事件回调函数会被存储在其中。例如,用户点击页面的按钮或滚动屏幕,这些事件也会对应相应的回调函数,从而被加入任务队列,等待执行。

最重要的是,理解回调函数的作用。每当发生某些特定事件时,定义的回调函数会被附加到任务队列中。当事件循环机制检测到任务队列有事件需要处理时,它就会将相应的回调函数从队列中取出并执行。这样,主线程就能在适当的时候处理这些耗时的操作,而不阻塞整个程序运行。

``
上一篇:java后台修改ZK页面的title
下一篇:Java合肥惠康养老平台app(源码+mysql+文档)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年05月11日 13时20分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2023-01-24
0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2023-01-24
100个电脑常用组合键大全(非常详细)零基础入门到精通,收藏这篇就够了 2023-01-24
10个程序员可以接私活的平台 2023-01-24
10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2023-01-24
10条sql语句优化的建议 2023-01-24
10款宝藏编程工具!新手必备,大牛强烈推荐! 从零基础到精通,收藏这篇就够了! 2023-01-24
10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了 2023-01-24
15个Python数据分析实用技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2023-01-24
15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2023-01-24
1分钟学会在Linux下模拟网络延迟 2023-01-24
200款免费的AI工具汇总 2023-01-24
2023年失业的你明白了什么道理? 2023-01-24
2023应届毕业生找不到工作很焦虑怎么办? 2023-01-24
2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2023-01-24
2023网络安全现状,一个(黑客)真实的收入 2023-01-24
2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2023-01-24
2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24