异步同步简述

异步同步是在于操作系统调用api上,操作系统api分异步同步。比如读取文件,同步调用操作系统会把当前线程挂起,完成之后再恢复。挂起的时候,操作系统就切换到其他线程了,这个新线程可能是另外的线程,也可能是其他进程的线程。异步调用则不同,调用之后操作系统立即返回,并不阻塞,这个时候线程还能去做其他事情,如果文件读取完成了,操作系统会通知成功,然后再去处理。为啥最近都流行异步,主要是异步效率高。同步调用需要创建太多的线程,而且调度不可控,线程调度开销也很大。而异步是没有线程切换的,内部维护一个队列,哪个io完成了就去操作哪个。对于业务代码来说,同步代码容易写,异步一般采用回调,有点反人类思维。有的语言有yield,可以把异步写成同步差不多的代码。而对于类似web服务器来说,异步模式更符合实际,客户端发起http请求,服务器处理请求,事件驱动,业务代码就跟一个插件一样。需要注意的是,在异步模式中,业务代码尽量避免同步调用。否则系统性能会严重下降。同样是高级语言,nginx lua很快,nginx php就很慢,其中一个因素是php没法实现异步。前端范中讲到,而lua跟nginx是绝配,高并发首选。回到题目,异步没有2个线程,只有一个线程。一般为了达到性能顶峰,会启动多个进程,因为cpu是多核的,几个核就启动几个。超过之后越多效率越低。题主应该关心的是文件完成之后线程如何知道,对于一般的来说,就是轮循,等多少时间轮循一次,看起来效率反而低了。那是你这个线程除了等文件读取完成之外没事做。但nginx这样的程序不会没事做,在等一个请求完成文件读取过程中,他可以处理其他请求,等这个文件处理完成了,再来处理原来的请求。但是业务代码要读取一个文件该怎么办呢,nginx并不知道你要读取说文件,也不能知道什么时候完成,就会打破nginx异步模型,导致性能急剧下降。一个方法就是读取文件也交给nginx,把读文件变成一个nginx子请求,这样nginx就能统一管理异步队列了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值