同步异步X阻塞非阻塞

本文通过生动的例子解释了同步阻塞、同步非阻塞、异步非阻塞及异步阻塞四种IO模型的区别。以去肯德基点餐为场景,形象地展示了不同模型下的操作方式和等待机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步阻塞:

有一天你饿了,要去肯德基吃饭,然后你去找了服务员,要了一份麦辣鸡腿堡,服务员说“稍等”,然后他过了一天才给你,你就在窗口站着等了一天。

等着(汉堡) //就堵这了
再做别的()

同步非阻塞:

有一天你饿了,要去肯德基吃饭,然后你去找了服务员,要了一份麦辣鸡腿堡,一份薯条,一份鸡翅,服务员说“稍等”,然后你就回家了,然后你每过一个小时回来挨个问一下,“汉堡好了吗,薯条好了吗,鸡翅好了吗”,汉堡好了,然后你过去拿到了汉堡,薯条好了,然后你过去拿到了薯条,鸡翅好了,然后你过去拿到了鸡翅

while true {
    for i in 汉堡薯条鸡翅 {
        if i is 好了
            吃掉(i)
    }
    playLOL()
}

异步非阻塞:

有一天你饿了,要去肯德基吃饭,然后你去找了服务员,要了一份麦辣鸡腿堡,服务员说“稍等”,然后你就回家了,然后第二天汉堡才好,第二天他把汉堡外卖送到了你家

要个(this,汉堡) //只是请求一下
playLOL()

onReceive(汉堡){
    eat(汉堡) //这里收
}
收到请求(dc,汉堡)
做(汉堡)
send(dc,汉堡) //这里发

异步阻塞:

有一天你饿了,要去肯德基吃饭,然后你去找了服务员,要了一份麦辣鸡腿堡,一份薯条,一份鸡翅,服务员说“稍等”,这次你不想每过一个小时问一次了,于是你找了一个助手叫epoll,他帮你盯着,你就等着,他发现汉堡好了后,通知你,然后你再去拿汉堡,他发现薯条好了后,再通知你……

while true {
    做好的[] = epoll_wait(汉堡薯条鸡翅)
    for i in 做好的[] {
        吃掉
    }
}

(epoll的底层实现是socket监控,收到中断)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值