对异步和同步以及阻塞和非阻塞的通俗理解

  1. 异步 vs. 同步:

    • 异步(Asynchronous): 在异步编程中,一个操作被触发后,程序不会等待它完成,而是继续执行后续的操作。异步操作通常使用回调函数、Promise、async/await等机制来处理操作完成后的结果。这允许程序同时执行多个任务,而不必等待每个任务完成。

    • 同步(Synchronous): 在同步编程中,操作被触发后,程序会等待它完成,然后才会继续执行后续的操作。同步操作是按顺序执行的,每个操作都要等待上一个操作完成才能开始。

  2. 阻塞 vs. 非阻塞:

    • 阻塞(Blocking): 阻塞调用是指当程序执行一个操作时,它会一直等待,直到操作完成为止。在此期间,程序不能执行其他任务,它被“阻塞”了。

    • 非阻塞(Non-blocking): 非阻塞调用是指当程序执行一个操作时,它不会等待操作完成,而是立即返回,允许程序继续执行其他任务。程序可以定期检查操作是否完成,或者通过回调函数等方式获取操作的结果。

下面是一个示例来说明这些概念之间的区别:

示例:文件读取

假设你要从磁盘读取一个大文件:

  • 同步阻塞: 在同步阻塞模式下,程序发起读取操作后会一直等待,直到整个文件读取完成,然后才能执行后续操作。这期间程序被阻塞。

  • 同步非阻塞: 在同步非阻塞模式下,程序发起读取操作后会立即返回,允许执行其他任务。然后,程序定期检查文件读取是否完成,但仍然是同步方式。这不会减少阻塞,只是在等待时可以执行其他任务。

  • 异步阻塞: 在异步阻塞模式下,程序发起异步读取操作后,它会继续执行后续操作,不会等待文件读取完成。但当需要文件内容时,程序会等待读取操作完成,这时会出现阻塞。

  • 异步非阻塞: 在异步非阻塞模式下,程序发起异步读取操作后会立即返回,允许执行其他任务。当文件读取完成后,程序会通过回调函数或其他机制得到通知,这时不会阻塞。

更通俗的理解

假设你有个保姆,你告诉她你想喝一杯开水:

  • 同步阻塞: 在同步阻塞模式下,你就一直站在旁边等,水烧开后,保姆把水倒进杯子递给你。

  • 同步非阻塞: 在同步非阻塞模式下,你告诉保姆后,就去打电动游戏去了,过一会儿你就跑过来看看杯子里有没有水,没水又跑去玩了,有水就喝水。

  • 异步阻塞: 在异步阻塞模式下,你告诉保姆后,你就去打电动游戏去了,过一会儿保姆喊你,水开了,但是要喝水你得自己倒水到杯子里喝。

  • 异步非阻塞: 在异步非阻塞模式下,你告诉保姆后,你就去玩电动游戏去了,水开了,保姆把水倒进杯子,然后喊你,你就跑过来喝水。

如理解有误,欢迎指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值