1. 程式人生 > >4.iOS多執行緒中,GCD技術的佇列與執行方式的組合結果

4.iOS多執行緒中,GCD技術的佇列與執行方式的組合結果

本文是對以往學習的多執行緒中知識點的一個整理。

多執行緒中的佇列有:序列佇列,併發佇列,全域性佇列,主佇列

執行的方法有:同步執行和非同步執行。那麼兩兩一組合會有哪些注意事項呢?

如果不是在董鉑然部落格園看到這邊文章請 點選檢視原文

提到多執行緒,也就是四種,pthread,NSthread,GCD,NSOperation  

其中phtread是跨平臺的。GCD和NSOperation都是常用的,後者是基於前者的。

但是兩者區別:GCD的核心概念是將一個任務新增到佇列,指定任務執行的方法,然後執行。 NSOperation則是直接將一個操作新增到佇列中。

為了整體結構更加清晰,我是用GCD來做此排列組合的實驗。實驗主要是通過迴圈內列印和主執行緒的列印先後順序來判斷結果,最後再加以總結

1.序列佇列,同步執行

1 2 3 4 5 6 7 8 9 10 dispatch_queue_t q = dispatch_queue_create("dantesx"NULL); // 執行任務 for (int i = 0; i<10; i++) { dispatch_sync(q, ^{ NSLog(@"%@ %d", [NSThread currentThread], i); }); } NSLog(@
"董鉑然 come here");

執行效果:

 

執行結果可以清楚的看到全在主執行緒執行,並且是按照數序執行,迴圈結束之後主執行緒的列印才輸出。

2.序列佇列,非同步執行

1 2 3 4 5 6 7 8 9 dispatch_queue_t q = dispatch_queue_create("dantesx"NULL); for (int i = 0; i<10; i++) { dispatch_async(q, ^{ NSLog
(@"%@ %d", [NSThread currentThread], i); }); } //    [NSThread sleepForTimeInterval:0.001]; NSLog(@"董鉑然 come here");

 執行結果

結果顯示,系統開了1條非同步執行緒,因此全部線上程2執行,並且是順序執行。主執行緒列印雖然在最上面,但是這個先後順序是不確定,如果睡個0.001秒,主執行緒的列印會混在中間。

3.併發佇列,非同步執行

1 2 3 4 5 6 7 8 9 10

相關推薦

4.iOS執行GCD技術佇列執行方式組合結果

本文是對以往學習的多執行緒中知識點的一個整理。 多執行緒中的佇列有:序列佇列,併發佇列,全域性佇列,主佇列。 執行的方法有:同步執行和非同步執行。那麼兩兩一組合會有哪些注意事項呢? 如果不是在董鉑然部落格園看到這邊文章請 點選檢視原文 提到多執行緒,也就是四種,pthread,NSthread,G

iOS執行佇列執行的排列組合結果分析

本文是對以往學習的多執行緒中知識點的一個整理。 多執行緒中的佇列有:序列佇列,併發佇列,全域性佇列,主佇列。 執行的方法有:同步執行和非同步執行。那麼兩兩一組合會有哪些注意事項呢? 如果不是在董鉑然部落格園看到這邊文章請 點選檢視原文 提到多執行緒,也就是四種,pthread,NSthread,GCD

QT執行物件訊號槽連線不上的解決辦法

1、在接收者建立執行緒中,把接收者移動到主執行緒中: pReceiverObj->moveToThread(QApplication::instance()->thread()); 2、這樣傳送訊號的時候,就會在主執行緒事件佇列處理中來處理了。 把connect的最

執行的方法、兩種實現方式、匿名內部類建立執行執行安全問題的解決、

多執行緒兩種實現方式: 方式一: 繼承Thread類的方式 方式二: 實現Runnable介面的方式。 方式一: 步驟: // 1. 定義一個類,然後繼承Thread //

Java執行Join和Interrupt()方法的使用

更多詳細的解答請轉至:http://my.oschina.net/summerpxy/blog/198457;http://uule.iteye.com/blog/1101994;(比如有一個執行緒t.當在Main執行緒中呼叫t.join()的時候,那麼Main執行緒必須拿

在 Java 的執行如何去判斷給定的一個類是否是執行安全的(另外:synchronized 同步是否就一定能保證該類是執行安全的。)

同步程式碼塊和同步方法的區別:同步程式碼塊可以傳入任意物件,同步方法中 如果多個執行緒檢查的都是一個新的物件,不同的同步鎖對不同的執行緒不具有排他性,不能實現執行緒同步的效果,這時候執行緒同步就失效了。   兩者的區別主要體現在同步鎖上面。對於例項的同步方法,因為只能使用

Spring 在執行bean的注入問題(轉部落格園)

最近碰到了一個問題,使用SSM框架,在Service層需要另開一個執行緒,這個執行緒專門用來做一些操作,並將結果寫入資料庫中。但是線上程中使用@Resource或者@Autowired注入全部為NULL,原來是Spring不能線上程中注入。網上的主要解決方法有:將需要的Bean作為執行緒的的建構函式的引數傳入

Handler寫在主執行使用Message傳遞訊息

Runnable是一個介面,Thread是Runnable的子類。 Message Message 是線上程之間傳遞的訊息,它可以在內部攜帶少量的資訊,用於在不同執行緒之間交換資料。 Ha

linux執行程式設計替代sleep的幾種方式

我只想要程序的某個執行緒休眠一段時間的,可是用sleep()是將整個程序都休眠的,這個可能就達不到,我們想要的效果了。 目前我知道有三種方式: 1 usleep    這個是輕量級的, 聽說能可一實現執行緒休眠, 我個人並不喜歡這種方式,所以我沒有驗證它的可行信(個人不推薦

.NET Core遇到奇怪的執行死鎖問題:記憶體執行數不停地增長

一個 asp.net core 站點,之前執行在Linux 伺服器上,執行一段時間後有時站點會掛掉,在日誌中記錄很多“EMFILE too many open files”的錯誤: Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvExc

執行基礎知識(一) 執行的概念及建立任務執行

執行緒的概念及建立任務與執行緒 引言 多執行緒使得程式中的多個任務可以同時執行。 java的重要功能之一就是內部支援多執行緒————在一個程式中運行同時執行多個任務。在許多程式設計語言中,多執行緒都是通過呼叫依賴於系統的過程或函式來實現的。在本文中,將介紹執行緒的該

Handler訊息傳遞機制(子執行傳遞new Handler和主執行new Handle傳遞訊息)

> 子執行緒中更新UI new Thread(new Runnable() {         @Override         public void run() {             Looper.prepare();          

linux查詢消耗cpu最高的執行(jstack)記憶體佔用最大執行(jmap)執行gc情況(jstat)

1.linux下    top  命令查詢查詢消耗cpu最高的程序id 2. 將程序資訊匯出到日誌檔案中   ./jstack 程序id >stack.log 3.查詢程序id下消耗cpu最高的執行緒id  top -Hp  程序id               執行

javascript既然是單執行語言 為什麼會分主執行和訊息執行(event loop) ?

縱觀那近萬字的作文,只有這麼一段是直接回答題主問題的,但是回答還是有問題的!如果再幾年前,這麼說還行,但是現在,不行! 首先在瀏覽器端,我們的js程式碼已經可能不全是在一個執行緒中了,這是由於h5引入了web workers,詳請請移步 使用 Web Workers。它允許我們開一個工作執行緒處理一些耗時的任

用Handler的post()方法來傳遞執行的程式碼段到主執行執行

package com.kale.handler; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android

最全java執行總結3——瞭解阻塞佇列執行安全集合不

  看了前兩篇你肯定已經理解了 java 併發程式設計的低層構建。然而,在實際程式設計中,應該經可能的遠離低層結構,畢竟太底層的東西用起來是比較容易出錯的,特別是併發程式設計,既難以除錯,也難以發現問題,我們還是使用由併發處理的專業人員實現的較高層次的結構要方便、安全得多。 阻塞佇列   對於許多執行緒問題,

C#執行程式設計(一)程序執行

一、 程序         簡單來說,程序是對資源的抽象,是資源的容器,在傳統作業系統中,程序是資源分配的基本單位,而且是執行的基本單位,程序支援併發執行,因為每個程序有獨立的資料,獨立的堆疊空間。一個程式想要併發執行,開多個程序即可。

iOS總結-執行篇之GCD之三

dispatch_barrier_async :GCD柵欄方法 dispatch_apply dispatch_semaphore:GCD訊號量 持有計數的訊號,計數為0時等待,不可通過.計數為1或者大於1時,計數減1且不等待,可通過. dispatch_semap

iOS總結-執行篇之GCD之二

dispatch_group dispatch_wait dispatch_group_enter/dispatch_group_leave dispatch_group_enter標誌一個任務加入group,未執行完畢任務數+1  dispatch_group

iOS總結-執行篇之GCD之一

程序:作業系統資源分配的基本單位   執行緒:任務排程和執行的基本單位 一個程序裡面可以有多個執行緒. GCD自動利用CPU核心(如雙核,四核),會自動管理執行緒的生命週期(建立執行緒,排程任務,銷燬執行緒) 而NSOperation Queue是可以管理執行緒的. 佇列