20170526-27關於GCD控制執行緒併發數,多執行緒併發數控制
主要看第二個。
關於GCD,可能很多人都會說,我會用。以前我也是這麼說的,其實,自己會用的很少很少,最多建立個多執行緒,然後返回主執行緒重新整理一下UI,如此而已。
這兩天研究了一下,控制多執行緒併發,也多虧了網路上各個同行的解答,文章。於是我封裝了了兩三種,希望能幫助踽踽獨行的各位同行們。
首先,如何控制GCD多執行緒的併發呢?這個並不像NSOperationQueue那樣,有一個直接的引數operationCount簡單直接的控制執行緒併發數量。
在GCD中,我們可以通過訊號量semaphore來進行執行緒併發數控制。直接看程式碼:
先給大家說一個停車的形象示例:
一個停車場還有十個車位,現在有一百輛車要進來這個停車場。前面的十個車主先進入了停車場,剩下的90個車主只好在外面等候,這時候,裡面有車不停了,開出一輛,剩下的90位車主趕緊進去了一輛。
執行緒限制:10,匯流排程數:100,只要有執行緒完成,其他等待中的執行緒立即插入。
這個semaphore訊號量有三個基礎方法:
1,dispatch_semaphore_create:建立一個訊號量,並初始化一個併發值,如果你想限制你的app的多執行緒的併發數最大為50,那就dispatch_semaphore_create(50);
2,dispatch_semaphore_wait:將當前訊號量減去1。就相當於車位減少一個。如果當前的訊號量為0,那麼將會在這裡等待。能達到控制執行緒最大併發數量。
3,dispatch_semaphore_signal:將當前的訊號量加上1。相當於完成一個執行緒,又空出一個車位。
下面是我的封裝,兩個c,一個類方法。
一、類方法:
二、能使用oc語言的c語言方法:
就是簡單的建立一個繼承於NSObject的類,然後把裡面的@interface @implemation這些全部刪除,形成一個可直接執行的函式類。
加上extern的修飾符,可以用於c++檔案。
三、c語言:
希望能有所幫助。如有轉載,請註明出處。
相關文章
- 併發工具類(三)控制併發執行緒的數量 Semphore執行緒
- Go高效併發 10 | Context:多執行緒併發控制神器GoContext執行緒
- Java多執行緒/併發12、多執行緒訪問static變數Java執行緒變數
- GCD執行緒控制GC執行緒
- mysql併發執行緒控制之控制thread_running數量MySql執行緒thread
- 關於多執行緒控制執行緒
- golang 限流器,控制併發,執行緒池Golang執行緒
- 五、併發控制(1):執行緒的互斥執行緒
- 多執行緒併發篇——如何停止執行緒執行緒
- JAVA多執行緒併發Java執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 併發、多執行緒、HTTP連線數有何關係?執行緒HTTP
- java 多執行緒 併發 面試Java執行緒面試
- 多執行緒與高併發(一)多執行緒入門執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java多執行緒/併發08、中斷執行緒 interrupt()Java執行緒
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒
- java多執行緒與併發 - 併發工具類Java執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 關於Java併發多執行緒的一點思考Java執行緒
- shell佇列實現執行緒併發控制(轉)佇列執行緒
- 深入理解Java多執行緒與併發框(第⑪篇)——執行緒池引數Java執行緒
- 多執行緒併發執行及解決方法執行緒
- mysql關於最大連線數、最大併發執行緒數的區別MySql執行緒
- 併發與多執行緒基礎執行緒
- MySQL多執行緒併發調優MySql執行緒
- 多執行緒與併發----Semaphere同步執行緒
- Java併發和多執行緒:序Java執行緒
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步
- 多執行緒-執行緒控制之守護執行緒執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 66.QT-執行緒併發、QTcpServer併發、QThreadPool執行緒池QT執行緒TCPServerthread
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- 【多執行緒與高併發】- 執行緒基礎與狀態執行緒