同步

同步代码主要是指调用某个逻辑时,会等待到该逻辑返回调用结果.
例如:

  1. <?php
  2. $num = 30;
  3. $result = M('test')->select();//伪代码,查询数据库
  4. sleep(3);//伪代码,当成执行了3秒才返回
  5. echo json_encode($result);//返回数据

只有当select查询到数据时,才会返回数据给$result,这个值一定是数据库操作完毕返回的值

例如:

  1. <?php
  2. $num = -30;
  3. $result = abs($num);
  4. echo json_encode($result);//返回数据

abs会返回数据给$result,这个值一定是abs正确操作的值

例如:
用户请求www.easyswoole.com,页面会一直等待easyswoole响应数据.

例如:

  1. <?php
  2. //模拟发送邮件中
  3. $status = send();
  4. sleep(30);//发送邮件花费30秒
  5. echo "发送邮件".$status?'完成':'失败';

等待发送邮件的成功/失败,就是同步

异步

异步代码主要是指调用某个逻辑时,不会等待该逻辑返回的结果,只会返回是否已经调用的最初结果(或不返回)
例如:

调用$.ajax(),默认情况下是异步ajax,它会继续往下执行代码,当有结果返回时通过回调事件进行处理.

例如:

  1. <?php
  2. $pid = pcntl_fork();
  3. if ($pid == 0) {
  4. //子进程
  5. //模拟发送邮件
  6. sleep(30);//发送邮件花费30秒
  7. exit(0);
  8. }
  9. pcntl_waitpid($pid, $status, WNOHANG);
  10. echo "发送邮件中";

通过新开一个进程去处理发送邮件的任务,在当前进程中不关心发送邮件的结果,直接往下执行

同步异步