• 同步
  • 异步

    同步

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

    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 "发送邮件中";

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

    同步异步