美文网首页全栈工程师
iOS 全栈攻城狮(PHP) —— Session 4

iOS 全栈攻城狮(PHP) —— Session 4

作者: PonyCui | 来源:发表于2015-12-05 11:31 被阅读494次

    同步执行

    PHP 是线程安全的,并且在一个请求的处理过程中是不支持多线程的。 对于网络请求来说,一个请求就是一个进程中的一个线程。
    并且,PHP 中的所有代码运行都是同步的,不存在异步执行的代码。

    例子

    于是我们可以对比 OC 和 Swift 中的多线程,假定在各自语言中抓取一个网页的数据。

    在OC中,我们一般使用异步线程操作网络请求

    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        if (data != nil) {
            NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];
    

    但是,在 PHP 中,除非使用 curl 库,网络请求都是同步,上面的请求在 PHP 中可以这样写。

    <?php
    $str = file_get_contents("http://www.baidu.com")
    echo $str;
    

    请记住,如果你不为 file_get_contents 设定超时,这个请求将一定锁定在 file_get_contents 这里直到请求返回数据为止。

    优劣

    同样的,如果你从缓存中获取数据或是从数据库中获取数据,所有的操作都是同步的,不存在异步回调的情况。

    同步返回的好处是,你可以非常容易地控制整个请求的逻辑,不需要担心多线程打乱你的逻辑,影响你的变量。

    坏处也是很明显的,你无法预知哪个请求会在什么时候锁死在那里,因此,PHP脚本的执行时间都会有一个时长限制(一般是 30s)。

    代码同步执行的特性来源于 C 语言中的思想,而 PHP 把这套思想完全继承下来了, 你只需要知道,在 PHP 的世界里,没有多线程的包袱。

    相关文章

      网友评论

      本文标题:iOS 全栈攻城狮(PHP) —— Session 4

      本文链接:https://www.haomeiwen.com/subject/pgwshttx.html