1. 程式人生 > >(轉載)三種queue

(轉載)三種queue

三種queue

1.序列佇列:Dispatch Queues或者 Serial Queues 

Dispatch Queues從使用的角度講更象另一種形式的Operation Queues,只是 Operation Queuse是用ObjectC的,Dispatch QueuesC的。

dispatch Queuesserial Queues 也被稱為私有dispatch Queues

需要自己手工建立執行,一個時間只能執行一個task,順序執行。

dispatch_queue_t queue;

queue = dispatch_queue_create("myQueue", NULL);  
dispatch_async(queue, ^{
        
    printf("Do some work here.\n");
    
});
 
   
printf("The first block may or may not have run.\n");
   
dispatch_sync(queue, ^{
        
    printf("Do some more work here.\n");
    
});
    
printf("Both blocks have completed.\n");
 

這裡使用了同步dispatch和非同步dispatch,推薦使用dispatch_async這樣才能真正體現其中的優勢同步相當於WaitUntil YES。

2.併發佇列:Concurrent Queues

每個程式系統自動提供了3Concurrent Queues,無需自己建立,可以直接使用。

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t aHQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

dispatch_queue_t aLQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
 

啥意思一看就明白,3個優先級別的concurrent queues。

3.主佇列:main dispatch Queue 

main dispatch Queue 也是程式啟動自動生成,無需自己建立,可以直接使用。

dispatch_queue_t mainQueue = dispatch_get_main_queue();
 

針對以上3種佇列:concurrent queuesmain queue 都是由系統生成而且 dispatch_suspend, dispatch_resume, dispatch_set_context這些函式對他們無效。

但是我們的應用不是簡單的同步也非同步的執行,應用經常是混合的。

比如我們要task1 task2 task3 都執行完成後才能非同步執行task4 task5 task6我們該怎麼做呢?這裡我們可以引入group的概念。

-(void)sixthMethod{
	//獲取concurrent queue
	dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
	//建立1個queue group
	dispatch_group_t queueGroup = dispatch_group_create();
	//任務1
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 1.");
	});
	//任務2
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 2.");
	});
	//任務3
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 3.");
	});
	NSLog(@"wait task 1,2,3.");
	//等待組內任務全部完成
	dispatch_group_wait(queueGroup, DISPATCH_TIME_FOREVER);
	NSLog(@"task 1,2,3 finished.");
	//釋放組
	dispatch_release(queueGroup);
	//重新建立組
	queueGroup = dispatch_group_create();
	//任務4
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 4.");
	});
	//任務5
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 5.");
	});
	//任務6
	dispatch_group_async(queueGroup, aQueue, ^{
		NSLog(@"task 6.");
	});
	NSLog(@"wait task 4,5,6.");
	//等待組內任務全部完成
	dispatch_group_wait(queueGroup, DISPATCH_TIME_FOREVER);
	NSLog(@"task 4,5,6 finished.");
	//釋放組
	dispatch_release(queueGroup);
}
  程式碼執行結果:

2012-04-11 16:47:22.294 Test04[2570:9203] wait task 1,2,3.

2012-04-11 16:47:22.294 Test04[2570:e103] task 1.

2012-04-11 16:47:22.294 Test04[2570:e203] task 2.

2012-04-11 16:47:22.296 Test04[2570:e103] task 3.

2012-04-11 16:47:22.298 Test04[2570:9203] task 1,2,3 finished.

2012-04-11 16:47:22.299 Test04[2570:9203] wait task 4,5,6.

2012-04-11 16:47:22.299 Test04[2570:e103] task 4.

2012-04-11 16:47:22.299 Test04[2570:e203] task 5.

2012-04-11 16:47:22.300 Test04[2570:e103] task 6.

2012-04-11 16:47:22.301 Test04[2570:9203] task 4,5,6 finished.

相關推薦

(轉載)queue

三種queue 1.序列佇列:Dispatch Queues或者 Serial Queues  Dispatch Queues從使用的角度講更象另一種形式的Operation Queues,只是 Operation Queuse是用ObjectC的,Dispatch

Vmware 虛擬機網絡模式最詳細解說【轉載

apt con 實現 not ont 管理 網絡連接模式 sysconf 理解 由於Linux目前很熱門,越來越多的人在學習linux,但是買一臺服務放家裏來學習,實在是很浪費。那麽如何解決這個問題?虛擬機軟件是很好的選擇,常用的虛擬機軟件有vmware workstati

轉載》Apache HTTP Server 與 Tomcat 的連接方式介紹

之前 img 6.2 自定義 con 訪問 ont 是什麽 bsp 本文轉載自IBM developer 首先我們先介紹一下為什麽要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 t

Stack的含義—轉載

兩種 col 垃圾 不同的 ima art 指向 程序 空間 轉載自:http://www.ruanyifeng.com/blog/2013/11/stack.html 學習編程的時候,經常會看到stack這個詞,它的中文名字叫做"棧"。 理解這個概念,對於理解程序的運

轉載-Weblogic部署的方式

base article 解壓 測試 必須 logic clas war包 cat 在weblogic中部署項目通常有三種方式:第一,在控制臺中安裝部署;第二,將部署包放在domain域中autodeploy目錄下部署;第三,使用域中配置文件config.xml 進行項目的

hdu4841---圓桌問題解題報告(約瑟夫環問題---陣列,queue,vector實現方式)

                                          &

資料持久化方式介紹(轉載

通過專案,我們瞭解到EF框架有三種資料持久化的方式,也就是標題中我所提到的三種。那麼這些方式之間又有什麼聯絡和區別呢?     篇幅原因,本篇部落格不再分別介紹每種方法如何實現的了,大家用的時候可以去Sou~一下。       先分別介紹

json的反序列方式(轉載

JSON(JavaScript Object Notation),在實際的開發中非常常用,甚至一個json就可以儲存所有需要的信心呢。     物件:一個物件以花括號"{"開始,並以"}"結束,json儲存使用key:value形式,每一個鍵後 有一個冒號

關於LIST擴容的方式(轉載自https://blog.csdn.net/wt122694/article/details/81173128)

int[] arr2=new int[arr1.length*2] //新陣列長度 for(int i=0;i<arr1.length;i++){ //複製 arr2[i]=arr1[i]; }  

迴圈的流程圖畫法總結 (轉載

三種迴圈的流程圖畫法總結       C語言程式設計中常用的三種迴圈為for(;;),while  和 do-while。        1.&nbs

Java的代理模式(轉載

Java的三種代理模式 1.代理模式 代理(Proxy)是一種設計模式,提供了對目標物件另外的訪問方式;即通過代理物件訪問目標物件.這樣做的好處是:可以在目標物件實現的基礎上,增強額外的功能操作,即擴充套件目標物件的功能. 這裡使用到程式設計中的一個思想:不要隨意去修改別人已經寫好的程式碼或

轉載】快速排序(演算法實現和非遞迴實現)

原文地址 python實現: import random a = [4,1,7,6,9,2,2,3,5,7,8,9,3,1,2,3,4,5,8,0,3,5] b = [4,1,7,6,9,2,8,0,3,5] def twoPointerSort(nums,le

[轉載]永遠不要將東西放進資料庫裡

導讀:作者Frank Wiles發 表了一篇博文,Frank Wiles曾在很多演講裡說過,改進你的系統的最好的方法是先避免做“蠢事”.並不是說你或你開發的東西“蠢”,只是有些決定很容易被人們忽略掉其暗含的 牽連,認識不到這樣做對系統維護尤其是系統升級帶來多大的麻煩.作為一個顧問,像這樣的事情我到處都能見到,

vmware網路模式配置(轉載

虛擬機器系統安裝的是Linux系統 首先,在本機上檢視所有網路配置連線,使用命令:ipconfig Microsoft Windows [版本 6.1.7600]版權所有 (c) 2009 Microsoft Corporation。保留所有權利。 C:\Users\Administrator>ip

Stack的含義(轉載

理解這個概念,對於理解程式的執行至關重要。容易混淆的是,這個詞其實有三種含義,適用於不同的場合,必須加以區分。含義一:資料結構stack的第一種含義是一組資料的存放方式,特點為LIFO,即後進先出(Last in, first out)。在這種資料結構中,資料像積木那樣一層層堆起來,後面加入的資料

網路轉載——人生最重要的能力,不是讀書能學來的!

影視劇中往往有這樣的觀感:一個地痞或者土匪,平日無惡不作。到了最後一集,哎,這貨突然抗日了,例如《大宅門》裡的三爺。這時候觀眾對其好感度會突然爆棚,甚至超過許多沒有爆點的正面角色,前幾十集的劣跡簡直一筆勾銷。這就是期望值在前期被編劇壓低之後的福利先記住一個公式:快樂值 = 現實 - 期望值我們剛進入一個團隊時

轉載)vmware中網絡連接方式(復制)

通過 eth 很多 rtu gpo 啟動系統 str 開機 有一個 原文來自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕鏈

Recycleview實現複雜頁面 以上佈局 瀑布流 多佈局 scrollview巢狀recyclerView 顯示不全 滑動衝突 之進階終極篇 (轉載

=============================================================================================== 相信很多安卓開發的朋友,尤其是剛從事安卓開發的朋友, 當產品經理遞過來一張複雜頁面的

SOCKET 檢測連結是否斷線的方法(轉載

   目前主要有三種方法來實現使用者掉線檢測:SO_KEEPALIVE ,SIO_KEEPALIVE_VALS 和Heart-Beat執行緒。下面我就上面的三種方法來做一下介紹。(1)SO_KEEPALIVE 機制        這是socket庫提供的功能,設定介面是setsockopt API:   BO

hadoop記錄-[Flink]Flink運行模式安裝部署以及實現WordCount(轉載

bject def ast atm jar int args 獲取 wordcount [Flink]Flink三種運行模式安裝部署以及實現WordCount 前言 Flink三種運行方式:Local、Standalone、On Yarn。成功部署後分別用Scala和J