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

同步执行

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 的世界里,没有多线程的包袱。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/三少爷的糖 (这首我想作为歌词,我自己想去尝试,请多指教,谢谢) 窗外的烟花夺目绚烂 屋内的寂寞已被点燃 眼看...
    三少爷的糖阅读 412评论 14 3
  • 今天那个支付宝被盗刷的事件被很多大V转发,人们开始质疑支付宝的安全性,其实以前也有过在网上刷淘宝支付宝被盗刷的...
    小编在飞阅读 327评论 0 1
  • 随着成长力度在不断深入,我和儿子之间的
    团的花园阅读 166评论 0 0