关于同步、异步与阻塞、非阻塞问题的研究

讨论同步异步以及阻塞非阻塞问题

1.同步:代码按正常顺序一行一行,一个任务一个任务地去执行。如果在执行一段调用命令时,在没有得到结果之前,该调用就不返回。换句话说,就是由调用者主动等待这个调用的结果直到完成才会继续进行。
2.异步:遇到异步代码,它会跳过异步代码,先把同步代码执行完,接着,到了合适的时机,才会去执行异步代码。换句话说,当一个异步过程调用发出后,调用者下面的任务不会被影响。同时在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
3.阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。
4.非阻塞:非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
5.同步和异步指的是被调用者,阻塞和非阻塞指的是调用者。同步和异步关注的是消息通信机制,而阻塞和非阻塞强调的是调用者当前状态。
清楚了这写概念,接下来再拿一个例子做一个演示:

故事:老王烧开水
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。
-同步阻塞
(PS:这种方法不够聪明呐。)
2.老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。
-同步非阻塞
(PS:现在的方法聪明了些,但是还是不够好。)
3.老王这次使用高大上的响水壶来煮水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。
-异步阻塞
(PS:既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢。)
4.老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水煮熟了以后通知他。
-异步非阻塞
(PS:这下感觉轻松了很多。)

在这个例子中,烧水的过程就相当于同步异步代码,即是被调用者的处理方式,它们相对于操作结果来说,会不会等待结果返回。而阻塞非阻塞就相当于老王在烧水的过程中的状态,阻塞就是说在烧水的过程中,老王不可以去干其他的事情,非阻塞就是在同样的情况下,可以同时去干其他的事情。阻塞和非阻塞是相对于主线程是否被阻塞。

在上文中,我们也提到了关于进程和线程的问题,这里,就做一个简述:
1.进程:一个项目就是一个进程。你只要把代码跑起来,那么这个代码就是可以当作一个项目,这个项目就是一个进程 。比如在任务管理器中,应用和后台进程都是如此。
进程是操作系统分配和调度资源(内存和CPU)的基本单位 。
2.线程:在一个进程中,包含若干个线程,真正干活的是线程。
如工厂—>进程 工人—>线程
进程大,线程小

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值