欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IOS開發(fā)-多線程隊列測試代碼

 更新時間:2017年09月30日 08:33:07   作者:chenhh6701  
這篇文章中,我不會說多線程是什么、線程和進(jìn)程的區(qū)別、多線程有什么用,當(dāng)然我也不會說什么是串行、什么是并行等問題,這些我們應(yīng)該都知道的。

直接貼測試代碼了。

當(dāng)前考慮的問題:
1.隊列有多少個消費(fèi)者
2.添加到隊列的新task是同步運(yùn)行(當(dāng)前線程阻塞)還是異步(當(dāng)前線程不阻塞)
3.多個隊列之間的調(diào)度(此文章未涉及)

//
// 單線程和多線程并發(fā)隊列測試(同步和異步)
//
// 基礎(chǔ)原理:
// 1)隊列:
//  1.1 dispatch_queue_t 是一個隊列,一個FIFO的消費(fèi)隊列
//  1.2 消費(fèi)者:隊列配置的運(yùn)行線程
//  1.3 被消費(fèi)對象: 添加到隊列中的運(yùn)行任務(wù)(block等)
//  1.4 運(yùn)行任務(wù):將任務(wù)放到隊列中,等待消費(fèi)者消費(fèi)
// 2)同步,異步  (對于任務(wù)) (此處的運(yùn)行指將任務(wù)發(fā)入到請求隊列中)
//  2.1 同步:A任務(wù)在運(yùn)行時,插入B任務(wù),A任務(wù)等待B任務(wù)運(yùn)行完才能運(yùn)行
//  2.2 異步: A任務(wù)在運(yùn)行時,插入B任務(wù),A任務(wù)不等待并且繼續(xù)運(yùn)行,B任務(wù)也運(yùn)行
// 假設(shè):
// ATask: 運(yùn)行fooA的Block
// BTask: 運(yùn)行fooB的Block
//
//
// 總結(jié):
// 不管單線程或多線程,同步或異步,一定要聯(lián)系請求隊列考慮



#import "TestQueueSi.h"

@interface TestQueueSi ()

@property (strong,nonatomic) dispatch_queue_t serialQueue;
@property (strong,nonatomic) dispatch_queue_t concurrentQueue;

@end

@implementation TestQueueSi


- (instancetype)init {
  self = [super init];
  if(self) {
    _serialQueue = dispatch_queue_create("chenhh.serialQueue", DISPATCH_QUEUE_SERIAL);
    _concurrentQueue = dispatch_queue_create("chenhh.concurrentQueue", DISPATCH_QUEUE_CONCURRENT);

  }
  return self;
}

/**
 QUEUE_SERIAL(單線程) 同步
 死鎖崩潰
 
 1.ATask運(yùn)行,同步加入BTask
 2.BTask加入到請求隊列中,可是沒有其他空余線程(ATask線程在 等待BTask),BTask等待空余線程,
 3.死鎖發(fā)生
 
 */
- (void)testSerialQueueSync {
  dispatch_sync(_serialQueue,^{
    [self fooA];
    dispatch_sync(_serialQueue,^{
       [self fooB];
    });
    [self fooA];
  });
}

/**
 QUEUE_CONCURRENT(多線程) 同步
 正常運(yùn)行

 1.ATask運(yùn)行,同步加入BTask,Atask線程等待
 2.BTask加入到請求隊列中,有其他空余線程(ATask線程在等待BTask),BTask運(yùn)行
 3.BTask運(yùn)行結(jié)束,ATask停止等待,繼續(xù)運(yùn)行
 
 */
- (void)testConcurrentQueueSync {
  dispatch_sync(_concurrentQueue,^{
    [self fooA];
    NSLog(@"first");
    
    // 同步 需要等待運(yùn)行結(jié)果
    dispatch_sync(_concurrentQueue,^{
      [self fooB];
    });
    
    // 等待同步代碼完成,再運(yùn)行
    [self fooA];
  });
}

/*
 QUEUE_SERIAL(單線程) 異步
 正常
 
 
 1.ATask運(yùn)行,異步加入BTask,Atask線程繼續(xù)運(yùn)行不等待
 2.BTask加入到請求隊列中,沒有其他空余線程(ATask線程在正常運(yùn)行),BTask等待空余
 3.ATask運(yùn)行完成,線程空出,BTask運(yùn)行
 
 */
- (void)testSerialQueueAsync {
  dispatch_async(_serialQueue,^{
    [self fooA];
    dispatch_async(_serialQueue,^{
      [self fooB];
    });
     [self fooA];
  });
}

/**
 QUEUE_CONCURRENT(多線程) 異步
 正常運(yùn)行
 
 1.ATask運(yùn)行,同步加入BTask,Atask線程繼續(xù)運(yùn)行不等待
 2.BTask加入到請求隊列中,有其他空余線程(ATask等線程在正常運(yùn)行),BTask運(yùn)行(ABTask同時運(yùn)行)
 
 */
- (void)testConcurrentQueueAsync {
  dispatch_async(_concurrentQueue,^{
    [self fooA];
    // 同步 需要等待運(yùn)行結(jié)果
    dispatch_async(_concurrentQueue,^{
      [self fooB];
    });
    
    // 等待同步代碼完成,再運(yùn)行
    [self fooA];
  });
}

- (void)fooA {
  NSLog(@" ************ fooA ************ ");
}

- (void)fooB {
  NSLog(@" ************ fooB ************ ");
}

@end

相關(guān)文章

  • IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋

    IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋

    這篇文章主要介紹了IOS TextFiled與TextView 鍵盤的收起以及處理鍵盤遮擋的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Objective-C中關(guān)于實例所占內(nèi)存的大小詳解

    Objective-C中關(guān)于實例所占內(nèi)存的大小詳解

    這篇文章主要給大家介紹了關(guān)于Objective-C中實例所占內(nèi)存的大小的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • IOS中的webView加載HTML

    IOS中的webView加載HTML

    在日常開發(fā)中,我們?yōu)榱诵蕰玫胶芏嗪芏嗟腤ebView,比如在做某個明細(xì)頁面的時候我們返回給你的可能是一個html字符串,我們就需要將當(dāng)前字符串展示到webView上面,所以我們對HTML標(biāo)簽需要有一定的認(rèn)識,下面我們來一起用html標(biāo)簽和JS寫一個打地鼠游戲
    2016-02-02
  • ios的簽名機(jī)制詳解

    ios的簽名機(jī)制詳解

    這篇文章主要介紹了ios的簽名機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用ios開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • iOS發(fā)送短信功能的實現(xiàn)代碼

    iOS發(fā)送短信功能的實現(xiàn)代碼

    本篇文章主要介紹了iOS發(fā)送短信功能的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • iOS 中事件的響應(yīng)鏈和傳遞鏈

    iOS 中事件的響應(yīng)鏈和傳遞鏈

    iOS事件鏈有兩條:事件的響應(yīng)鏈;Hit-Testing事件的傳遞鏈。這篇文章主要介紹了iOS 中事件的響應(yīng)鏈和傳遞鏈,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 詳解iOS中UIView的layoutSubviews子視圖布局方法使用

    詳解iOS中UIView的layoutSubviews子視圖布局方法使用

    這篇文章主要介紹了iOS中UIView的layoutSubviews子視圖布局方法使用,文中舉了一個layoutSubviews在iPad橫豎屏切換時被調(diào)用用來重新布局的實例,需要的朋友可以參考下
    2016-04-04
  • iOS開發(fā)中使用屏幕旋轉(zhuǎn)功能的相關(guān)方法

    iOS開發(fā)中使用屏幕旋轉(zhuǎn)功能的相關(guān)方法

    這篇文章主要介紹了iOS開發(fā)中使用屏幕旋轉(zhuǎn)功能的相關(guān)方法,包括Transform變化矩陣原理的講解,需要的朋友可以參考下
    2015-09-09
  • UIScrollView實現(xiàn)六棱柱圖片瀏覽效果

    UIScrollView實現(xiàn)六棱柱圖片瀏覽效果

    這篇文章主要為大家介紹了UIScrollView實現(xiàn)六棱柱圖片瀏覽效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • IOS URL中文亂碼問題解決方案

    IOS URL中文亂碼問題解決方案

    這篇文章主要介紹了IOS 解決URL中文亂碼問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論