iOS 多個網路請求並行 併發處理

2021-07-27 03:42:47 字數 1149 閱讀 5244

ios 多個網路請求並行/併發處理

同時存在a,b,c,d四個網路請求,要求同時發起四個網路請求,當四個網路請求都返回資料以後再處理事件e。
/建立訊號量/

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

/建立全域性並行/

dispatch_queue_t queue = dispatch_get_global_queue(dispatch_queue_priority_default, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^

dispatch_semaphore_signal(semaphore);

});dispatch_group_async(group, queue, ^

dispatch_semaphore_signal(semaphore);

});dispatch_group_async(group, queue, ^

dispatch_semaphore_signal(semaphore);

});dispatch_group_async(group, queue, ^

dispatch_semaphore_signal(semaphore);

});dispatch_group_notify(group, queue, ^);

分析:首先建立並行佇列,建立佇列組,將佇列和需要處理的網路請求分別新增到組中,當組中所有佇列處理完事件後呼叫dispatch_group_notify,我們需要在裡邊處理事件e。由於佇列在處理網路請求時將」傳送完乙個請求」作為事件完成的標記(此時還未獲得網路請求返回資料),所以在這裡需要用訊號量進行控制,在執行dispatch_group_notify前發起訊號等待(4次訊號等待,分別對應每個佇列的訊號通知),在每個佇列獲取到網路請求返回資料時發出訊號通知。這樣就能完成需求中的要求。

如果需求中改為:同時存在a,b,c,d四個任務,要求abcd依次進行處理,當上乙個完成時再進行下乙個任務,當四個任務都完成時再處理事件e。這時只需要將佇列改為序列佇列即可(不在需要訊號量控制)。

iOS 網路請求

pragma mark 網路請求 方式 非同步 ibaction delegatebuttondidclicked uibutton sender 方法 客戶端收到伺服器的響應 pragma mark 客戶端收到伺服器的響應 void connection nsurlconnection conne...

promise處理併發請求

asyncpool poollimit,array,iteratorfn 每調一次enqueue,初始化乙個promise const item array i const p promise.resolve then iteratorfn item,array 放入promises陣列 ret.p...

playframe 處理高併發請求

參考此例子進行優化 具某同事說,本來併發200就崩潰的 專案 輸出到tomcat 使用了以上配置,居然上到接近1000 下面是部分 public static void updatelivedata integer id,string nv,string f 這是controller的方法 publ...