freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

ios平臺下并發(fā)編程的研究和實現畢業(yè)論文(專業(yè)版)

2025-09-07 08:25上一頁面

下一頁面
  

【正文】 雖然這樣可以代替context指針,但是應該謹慎地使用這種方式。多數類型的調度源不需要取消處理操作,除非對調度源有自定義的行為并且需要在釋放時執(zhí)行。// 基于block的事件處理操作void (^dispatch_block_t)(void)// 基于函數的時間處理操作void (*dispatch_function_t)(void *)在事件處理操作中,可以從調度源提供的事件中獲取事件的相應信息。2. 配置調度源: a) 給它分配一個事件處理操作;b) 對于定時器源,使用dispatch_source_set_timer函數設置定時器信息。在配置一個 調度源時,需要指定想要監(jiān)聽的事件、調度隊列以及用于處理事件的代碼。// 完成工作后釋放這個組dispatch_release(group)。3. 當等待調用返回時,使用資源繼續(xù)工作。如果不想創(chuàng)建Cocoa程序,而且不想顯示地設置RunLoop,那么必須調用dispatch_main方法drain主線程,當然也可以添加任務到這個隊列,但是它不會執(zhí)行,直到調用這個方法。 dispatch_async(queue, ^{ block(avg)。永遠不應該調用同步任務到你需要執(zhí)行任務的線程,因為這樣可能會造成死鎖。 // 釋放 free(theData)。使用dispatch_get_main_queue獲取程序主線程對應的串行隊列,這個隊列是系統自動創(chuàng)建的,調用dispatch_main函數或者配置RunLoop在主線程上。如下:dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORTITY_DEFAULT,0)。3. 盡管使用隊列要比原生的線程效率高,但是創(chuàng)建block和在隊列中執(zhí)行仍然需要一定的開銷,如果某個塊執(zhí)行的任務量很小,直接調用它可能要比在隊列中執(zhí)行好一些。Dispatch semaphores:類似于傳統的信號量,通常要高效一些。3. 系統在選取新的任務執(zhí)行時會考慮隊列的優(yōu)先級。所有的調度隊列都是先進先出的,因此任務開始執(zhí)行的順序與添加順序一致。 ranIt = YES。操作對象不會在isReady方法返回YES之前執(zhí)行,isReady方法取決于其依賴的對象是否全部執(zhí)行完畢。對于添加到隊列的操作對象,執(zhí)行順序首先取決于已經入隊操作對象的準備情況,然后取決于其優(yōu)先級。如果需要取消操作對象,只需調用其cancel方法即可,同樣,整個過程可能不需要修改隊列優(yōu)先級。// 開啟單獨的線程并執(zhí)行任務[NSThread detachNewThreadSelector:selector(main) toTarget:self withObject:nil]。isConcurrent:重載并且返回YES即可。操作對象應該在整個執(zhí)行周期中檢查是否有取消事件發(fā)生,并且優(yōu)雅地處理該事件。,正在執(zhí)行時也可以取消。不過,使用線程時最好再次確認其必要性。如果使用block封裝任務,可以向一個串行或并行的隊列添加block來執(zhí)行。在考慮程序中引入并發(fā)前,首先應該從明確程序正確的行為開始。7. 串行隊列提供了更加有效的同步機制。使用異步編程的技術之一為 GCD(Grand Central Dispatch)。第二章 并發(fā)程序的設計早期的計算機執(zhí)行最小任務所需的時間單元取決于CPU的時鐘速度,但隨著CPU技術的發(fā)展以及處理器上的核心越來越密集,散熱和其他物理因素開始影響CPU的最大時鐘速度。不能創(chuàng)建很多的線程,然后認為程序會很好的運行這些線程。在多核 CPU 上才以真正的并行方式來運行。多線程也作為越來越重要的一個部分需要開發(fā)者來掌握。同時,這些 API 本身處在不同的抽象層級上。相比較傳統的基于線程的系統和應用程序,OS X 和 iOS 更多地采用異步方法來執(zhí)行并行任務。如果把這項任務交由開發(fā)者,那么多線程編程將會變得更加復雜,因此,最好的方式是使用系統為我們提供的并發(fā)編程模型。并行的調度隊列在同一時間內可以執(zhí)行多個任務,并不需要等待上個任務完成。提交到操作隊列的對象必須是NSOperation類的子類,NSOperation子類的對象封裝執(zhí)行的任務以及所需的數據。如果任務的執(zhí)行結果與任務中步驟的執(zhí)行順序無關,那么可以使用并發(fā)來提高性能。在代碼中引用并發(fā)之前,無論是使用隊列還是線程,都應該采集一些基準的性能指標反映當前的程序性能。當所有相關的block執(zhí)行完畢后,operation對象才完成。代碼示例如下:interface CWNonConcurrentOperation : NSOperationproperty id (strong) data。通過調用start方法手動執(zhí)行操作。}// 重載實現 KVO (BOOL)isExecuting { return executing。 [self didChangeValueForKey:” isFinished”]。這種依賴性表示當前的對象只有在目標對象完成時才可以開始執(zhí)行。創(chuàng)建隊列與創(chuàng)建其他對象的方式一樣。 } ranIt = YES。第四章 調度隊列在iOS平臺中,GCD 調度隊列是執(zhí)行任務的強大工具,可以使用同步或異步方式執(zhí)行任意的代碼塊。使用調度隊列編碼要比線程簡單的多,其編碼的關鍵是設計能夠異步執(zhí)行且資源就緒的任務。在iOS 5以后,可以指定調度隊列類型為 DISPATCH_QUEUE_CONCURRENT來創(chuàng)建自己的并發(fā)調度隊列,除此之外,系統已經提供了四個預先定義的調度隊列供使用。在block中訪問變量會將其復制到堆上,以便于之后對該變量的訪問(棧上的變量一出棧就銷毀了)。除此之外,如果考慮使用隊列的特殊用途,也可以通過配置相應的屬性來實現。在希望大量任務同時執(zhí)行時,將其添加到全局隊列是最好的方式。對于隊列來說,可以使用上下文數據來存儲ObjectiveC對象的指針,或者其他的數據結構,這些數據能夠幫助標識隊列或者代碼中的其他用途。一旦進入隊列,考慮到其約束和現有的任務已經在隊列中,就盡可能最快地開始執(zhí)行任務。printf(Both blocks have pleted.\n)。如果當前的任務比較耗時,最好在另一個線程中調用它。暫停和恢復調用是異步的,并且只影響還未執(zhí)行的block,正在執(zhí)行的block不會被打斷。dispatch groups是一種可以鎖住一個線程直到其他任務完成執(zhí)行的方式,如果當前任務需要其他一個或多個任務完成時才可以執(zhí)行,這種情況下可以使用dispatch groups。GCD支持以下Dispatch Sources:1. 定時器dispatch source :生成周期性的通知。如果新的事件已經到達,而隊列中上一個事件尚未被處理,那么可以將這兩個事件的數據合并后作為一個新的事件。當事件發(fā)生后,將提交事件處理操作到指定的隊列上來處理事件。dispatch_source_get_handle:這個函數返回調度源管理的底層數據類型。修改隊列可以改變執(zhí)行調度源事件的優(yōu)先級。雖然外部所有權的方式比較常見,但當希望創(chuàng)建自主的調度源,并讓它管理自己的行為時,可以使用內部所有權。在創(chuàng)建調度源時可以指定一個隊列,用于執(zhí)行事件處理器和取消處理器。調度源總是異步執(zhí)行其事件處理程序,所以可能之前捕獲的變量隨著事件處理程序的執(zhí)行已經消失了。在創(chuàng)建調度源時,必須定義事件處理操作,用于處理調度源產生的事件。因此調度源會retain自己的隊列防止過早釋放,因為很可能釋放后下一個事件發(fā)生后找不到隊列。GCD就是依據這種方式,允許提交請求,并且使用block和調度隊列來回調請求的結果。// 完成工作后,釋放資源,并且標識信號量close(fd)。引用計數大于0時,會掛起。像普通的for循環(huán),dispatch_apply或dispatch_apply_f函數在所有的循環(huán)迭代完成之前不會返回。dispatch_sync(myCustomQueue, ^{ printf(Do some more work here.\n)。 } return serialQueue。dispatch對象(包括調度隊列)允許將對象和自定義上下文聯系起來。不同于鎖,串行調度隊列確保執(zhí)行任務時按照可預見的順序,只要同步的提交任務到串行隊列,那么隊列就不會陷入僵局(死鎖)。在添加block到隊列前,需要決定使用哪種類型的隊列,以及如何使用它。block一個很重要的優(yōu)點就是能夠引用自己作用域外的變量,當在函數或方法中創(chuàng)建block時,它在某種程度上類似于傳統的代碼塊。但任務仍然按照添加的順序執(zhí)行,當前的任務運行在不同的線程上,這些線程由調度隊列管理。相比于應用程序本身,操作系統能夠更加高效地管理線程,系統能夠根據可用的資源以及當前的并發(fā)線程數量,動態(tài)地擴展正在運行線程的數量。除了等待單個操作對象完成,也可以等待整個操作隊列完成,然后可以繼續(xù)向其添加操作對象。 ![anOp isCancelled]) { // 當操作對象準備好并且沒有被取消時 if(![anOp isConcurrent]) { // 操作對象為串行執(zhí)行時,直接調用start方法 [anOp start]。程序可以擁有多個操作隊列,但如果太多會有限制。使用NSOperation類的addDependency:方法創(chuàng)建兩個對象之間的依賴關系。 // 在任務完成后,需要更改對應的狀態(tài)信息 executing = NO。 } return self。操作隊列為非并發(fā)的任務提供了線程,不過現在大多數操作需要異步運行,因此需要重載一些方法。對于并發(fā)操作,必須重載現有的一些代碼,下面各節(jié)主要講述重載的內容。第一個子類為NSInvocationOperation,基于一個方法選擇子和對象創(chuàng)建的對象,當程序中已經存在現有的方法,并且希望異步執(zhí)行時,是一個較好的選擇。然而這些技術并不能保證一定能夠提高程序的性能或改善代碼的執(zhí)行效率。在羅列程序任務時,應該基本明確哪些任務并發(fā)處理時會高效一些。 Queues操作隊列由iOS中NSOperationQueue類實現。調度隊列串行或并行地執(zhí)行任務,任務開始執(zhí)行的順序與其添加順序一致。例如,在8核CPU中,創(chuàng)建8個線程完成某個任務,看起來似乎充分利用了CPU的多個核心,但是很有可能每個線程中用到的某個框架又創(chuàng)建了多個線程[1]。對于一個程序,由于線程的最佳數目基于系統負載和底層硬件而動態(tài)改變,因此實現一個正確的線程解決方案是非常困難和復雜的。OS X 和 iOS 提供了幾種不同的 API 來支持并發(fā)編程。在計算機中,單個核心下的并發(fā)一般為時間片的輪流,宏觀上為多個任務同時執(zhí)行,微觀上每個時刻仍然只執(zhí)行一個任務。運行在前臺的程序與用戶交互并且占用大量的 CPU 時間。即使得到了正確的數字,想要這么多線程之間不能干擾且高效運行,仍然具有很大的難度。傳統意義上利用CPU多核特性的方式為創(chuàng)建多個線程,然而移動設備上的CPU受限于系統負載和散熱等其他因素,不可以創(chuàng)建大量的線程而又使得程序很好的運行。GCD 負責創(chuàng)建線程并在線程上執(zhí)行任務所需的代碼,現在由于線程管理是系統的一部分,GCD接管了線程管理以及任務的執(zhí)行,因此這種方式要比傳統創(chuàng)建線程的方式高效一些,更重要的是極大地減輕了開發(fā)者的負擔。 Sources調度源是用于異步處理特殊系統類型事件的基于C語言的機制。第一件事,就是羅列出程序所有要做的任務以及相關的數據結構。如果工作單元對于執(zhí)行順序沒有要求,可以使用并發(fā)的隊列或者多個不同的并發(fā)隊列,具體取決于程序需求。本章節(jié)主要介紹 NSOperation 類的使用以及自定義子類化。應該提交操作對象到操作隊列上,讓它們在單獨的線程或者多個線程上執(zhí)行相應的工作,而不是在主線程上做大量的操作。支持取消操作是很重要的,isCancelled方法調用返回非??欤虼丝梢灶l繁的調用而不會造成額外的開銷。 BOOL finished。[self didChangeValueForKey:”isExecuting”]。成功建操作對象后,在將其添加到隊列之前,可以對操作對象進行配置。優(yōu)先級只適用于同一個隊列中的不同對象,如果程序中有多個操作隊列,每個對象在不同的隊列中的優(yōu)先級是相互獨立的。如果程序中定義了一些并發(fā)的操作對象,那么應該考慮在加載之前調用其isConcurrent方法,當它返回NO時,就能夠決定是在當前線程同步執(zhí)行操作對象還是開啟另一個線程。}一旦操作對象添加到操作隊列后,將由操作隊列高效地管理并且不能被移除,唯一出隊的方式就是取消它,可以通過調用其cancel方法取消單個的操作對象,也可以調用操作隊列的cancelAllOperation方法取消隊列中所有的操作對象。當程序中引入并發(fā)性時,相比較線程而言,調度隊列提供了幾個特有的優(yōu)勢。下面列出了幾種調度隊列,并相應做了簡要的說明。Dispatch Source:對特定類型的系統事件生成通知,可以使用Dispatch Source來觀察類似進程通知、信號或描述符事件等等。4. 不要試圖緩存一些與底層線程有關的數據,以望另一個不同的block能夠更容易獲取這些數據。需要注意的是,第二個參數是為了以后使用而預留的,現在傳入0即可。調度隊列和其他dispatch對象都是引用計數類型。 myInitializeDataContextfuction(data)。下面的例子演示了如何同步或異步執(zhí)行基于 block 的變體:dispatch_queue_t myCustomQueue。 // 當用戶提供的block完成時release隊列 dispatch_release(queue)。GCD對Cocoa內存管理提供了內建的支持,因此可以在提交到隊列的bl
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1