搜索
您的当前位置:首页正文

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

来源:二三娱乐

同步执行

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

例子

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

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

[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL  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 = 
echo $str;

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

优劣

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

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

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

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

Top