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轉發,人們開始質疑支付寶的安全性,其實以前也有過在網上刷淘寶支付寶被盜刷的...
    小編在飛閱讀 331評論 0 1
  • 隨著成長力度在不斷深入,我和兒子之間的
    團的花園閱讀 166評論 0 0