本文将给大家分享swoole面试题之同步、异步、阻塞、非阻塞的理解
同步异步:说的是kernel返回处理信息的方法策略
针对程序中碰到耗时任务时,传递给Kernel Kernel处理信息的方式 有异步api函数是异步 没的话是同步
IO立即返回:主函数中(task函数) 传递任务信息给Kernel,Kernels收到(onTask函数),这个耗时任务我完成之后我会再告诉你的(onFinish) 这是异步
IO完成之后返回:这个是同步 就是一个return即可!
堵塞非堵塞:说的是应用程序执行耗时任务的状态
针对的是程序中碰到耗时任务主程序的运行会不会wait
不wait就是非堵塞 wait就是堵塞 是说的一个程序的一个任务点状态!
例子
小张喜欢喝咖啡,同时养了好多狗;
要完成的事情:小张煮咖啡然后喝咖啡
1.小张: application
2.咖啡壶:kernel 内核
3.煮咖啡:耗时任务
4.小狗大黑:查询信息流 send() rev()
5.小狗大黄:查询信息流 send() rev()
6.小狗大白大红:查询信息流 send() rev()
同步阻塞:
小张派大黑去看咖啡煮好没,大黑等咖啡煮开了(同步)才回来,
小张也一直在等待(堵塞) ;
同步非阻塞:
小张派大黄去看咖啡煮好没,大黄看了一眼就回来了,过了一会,大黄再去看看咖啡煮好没(异步),
小张啥也没有干,还是一直等着(同步)
异步非阻塞:
小张派大白和大红去看咖啡煮好没,煮咖啡是task,小张就开始看电视了(非堵塞)
大白和大红到了厨房后,大白就回来告诉小张,大红已经到厨房啦(onTask异步);
过了一会咖啡煮好了,大红回到客厅告诉小张(onFinish)
异步阻塞:
小张派大白和大红去看咖啡煮好没,煮咖啡是task,小张心很急非要一直等着 就开始等着信息(堵塞)
大白和大红到了厨房后,大白就回来告诉小张,大红已经到厨房啦,咖啡煮着呢 (onTask异步);
过了一会咖啡煮好了,大红回到客厅告诉小张(onFinish)
小张这才放松了,继续干其他的了!感觉有些焦虑啊!
图示
从上面的图可以看出来,其实不管是任何模式,内核的处理方式都是一样的,都是
1. wait for data(等待数据);
2. copy data from kernel to user(拷贝数据到用户层)。
而产生这三种模式的差别在于中间使用的api函数不同。
以上就是“swoole面试题:说说你对阻塞、非阻塞的理解”的详细内容,想要获取更多swoole教程欢迎关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/8241/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取