- 目录
- 1.前言
- 2.概念
- 3.异步原理
- 3.1 异步的方法类型
- 3.1.1 本地IO操作
- 3.1.2线程
- 3.2 如何通知接收方
- 3.2.1回调概念
- 3.2.2异步实战概念
- 3.2.3异步实战场景
- 3.2.3.1 情况一:请求-响应模式(同步)
- 3.2.3.2情况二:使用CURL异步执行实现
- 3.2.3.3情况三:使用fsockopen()异步执行实现
- 3.2.3.4情况四:使用popen()指向进程管道异步执行实现
- 3.2.3.5情况五:使用REDIS消息队列+定时任务异步执行实现
- 3.2.3.6情况六:使用swoole扩展提供的异步执行实现
- 4.PHP内置回调函数
- 4.1 call_user_func()函数
- 4.1.1 调用普通函数
- 4.1.2调用类的方法
- 4.2 call_user_func_array()函数
- 4.2.1 调用普通函数
- 4.2.2调用类的方法
- 5.总结
1.前言
公司项目使用到了异步调用,但是说实际的,我的脑海对异步调用没有形成概念,所以下面,我对这部分内容进行总结和实现一些案例,帮助自己理解和汇总。
代码分享: https://github.com/mtdgclub/asyCall
2.概念
一般来说,我们的调用分为两种,一种是异步调用,一种是同步调用。
- 同步调用:就是客户端等待调用执行完成并返回结果。
- 异步调用:实现一个可以无需等待被调用函数的返回值就让操作继续进行的方法。
其实说到异步和同步的概念,就不得不说一下阻塞和非阻塞的概念。这是一些很容易搞混的概念!学过进程的朋友都应该知道,进程间的通信是通过send()和receive()操作完成通信的。而相对于发送方,要么阻塞式发送、要么非阻塞式发送,而对于接收方就是我们上面说过的同步和异步方式接收,所以同步、异步、阻塞、非阻塞是相对于发送方和接收方而言的。
- 阻塞式发送:发送方进程会一直被阻塞