IOS 개발-다 중 스 레 드 큐 테스트 코드

테스트 코드 붙 였 어.
현재 고려 하고 있 는 문제:
1.대열 에 몇 명의 소비자 가 있 습 니까?
2.대기 열 에 추 가 된 새 task 는 동기 화 실행(현재 스 레 드 차단)입 니까?비동기 입 니까?(현재 스 레 드 가 막 히 지 않 습 니 다)
3.여러 대기 열 간 스케줄 링(이 글 은 언급 되 지 않 음)

//
//              (     )
//
//     :
// 1)  :
//  1.1 dispatch_queue_t      ,  FIFO     
//  1.2    :         
//  1.3      :            (block )
//  1.4     :        ,       
// 2)  ,    (    ) (                 )
//  2.1   :A      ,  B  ,A    B         
//  2.2   : A      ,  B  ,A           ,B     
//   :
// ATask:   fooA Block
// BTask:   fooB Block
//
//
//   :
//          ,     ,           



#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  ,    BTask
 2.BTask        ,          (ATask      BTask),BTask      ,
 3.    
 
 */
- (void)testSerialQueueSync {
  dispatch_sync(_serialQueue,^{
    [self fooA];
    dispatch_sync(_serialQueue,^{
       [self fooB];
    });
    [self fooA];
  });
}

/**
 QUEUE_CONCURRENT(   )   
     

 1.ATask  ,    BTask,Atask    
 2.BTask        ,       (ATask     BTask),BTask  
 3.BTask    ,ATask    ,    
 
 */
- (void)testConcurrentQueueSync {
  dispatch_sync(_concurrentQueue,^{
    [self fooA];
    NSLog(@"first");
    
    //            
    dispatch_sync(_concurrentQueue,^{
      [self fooB];
    });
    
    //         ,   
    [self fooA];
  });
}

/*
 QUEUE_SERIAL(   )   
   
 
 
 1.ATask  ,    BTask,Atask         
 2.BTask        ,        (ATask       ),BTask    
 3.ATask    ,    ,BTask  
 
 */
- (void)testSerialQueueAsync {
  dispatch_async(_serialQueue,^{
    [self fooA];
    dispatch_async(_serialQueue,^{
      [self fooB];
    });
     [self fooA];
  });
}

/**
 QUEUE_CONCURRENT(   )   
     
 
 1.ATask  ,    BTask,Atask         
 2.BTask        ,       (ATask        ),BTask  (ABTask    )
 
 */
- (void)testConcurrentQueueAsync {
  dispatch_async(_concurrentQueue,^{
    [self fooA];
    //            
    dispatch_async(_concurrentQueue,^{
      [self fooB];
    });
    
    //         ,   
    [self fooA];
  });
}

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

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

@end

좋은 웹페이지 즐겨찾기