美文网首页
各种队列、同步、异步

各种队列、同步、异步

作者: iOS白水 | 来源:发表于2018-01-02 10:32 被阅读0次
image.png
/**
 提问:是否开线程?是否顺序执行?come here 的位置?
并发队列+异步
 1.开启新线程、异步执行所有任务、拥有一个线程池 不是每次都创建新的线程
 */
- (void)test1 {
    
    // 1. 队列
    dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_CONCURRENT);
    
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_async(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    
    NSLog(@"come here");
}


/**
 提问:是否开线程?是否顺序执行?come here 的位置?
并发队列+同步
 1.不会创建新线程 都在主线程执行
 */
- (void)test2 {
    
    NSLog(@"currentThread:%@", [NSThread currentThread]);
    // 1. 队列
    dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_CONCURRENT);
    
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_sync(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);// <NSThread: 0x604000070200>{number = 1, name = main} - 1
        });
    }
    
    NSLog(@"come here");
}



/**
 提问:是否开线程?是否顺序执行?come here 的位置?
 同步队列+异步
 1.只会开启一个新的线程
 2.异步是针对主线程的。任务还是同步的。
 */
- (void)test3 {
    
     NSLog(@"currentThread:%@\n", [NSThread currentThread]);
    // 1. 队列
    dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_SERIAL);
    
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_async(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    NSLog(@"come here");
}


/**
 提问:是否开线程?是否顺序执行?come here 的位置?
 同步队列+同步
 1.不会创建新线程 都在主线程执行
 */
- (void)test4 {
    
    NSLog(@"currentThread:%@\n", [NSThread currentThread]);
    // 1. 队列
    dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_SERIAL);
    
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_sync(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    
    NSLog(@"come here");
}



/**
 提问:是否开线程?是否顺序执行?come here 的位置?
 主队列+异步
 1.不开启新线程 直接再主线程执行
 2.异步是针对主线程的。任务还是同步的。
 */
- (void)test5 {
    
    NSLog(@"currentThread:%@\n", [NSThread currentThread]);
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_async(dispatch_get_main_queue() , ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    NSLog(@"come here");
}


/**
 提问:是否开线程?是否顺序执行?come here 的位置?
 主队列+同步
 1.死锁
 */
- (void)test6 {
    
    NSLog(@"currentThread:%@\n", [NSThread currentThread]);

    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    
    NSLog(@"come here");
}


/**
 提问:是否开线程?是否顺序执行?come here 的位置?
 并发队列+栅栏
 1.开启新线程 同步执行
 */
- (void)test7 {
    
    NSLog(@"mainThread:%@\n", [NSThread currentThread]);
    // 1. 队列
    dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_CONCURRENT);
    
    // 2. 执行任务
    for (int i = 0; i < 100; ++i) {
        dispatch_barrier_async(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }
    
    NSLog(@"come here");
}

相关文章

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • GCD的几种创建方式及基本使用

    同步函数 同步函数+主队列 同步函数+串行队列 同步函数+并发队列 异步函数 异步函数+主队列 异步函数+串行队列...

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

  • 各种队列、同步、异步

  • 多线程GCD笔记

    同步函数 + 主队列 异步函数 + 主队列 同步函数 + 串行队列 异步函数 + 串行队列 同步函数 + 并发队列...

  • GCD详解

    一 使用步骤 创建队列(串行队列或并发队列) 调用函数(同步或异步) 二 重要概念 1,同步和异步 同步或异步最大...

  • GCD

    1、同步串行队列 2、同步并行队列 3、异步串行队列 4、异步并行队列 5、死锁 主线程中创建同步串行队列 主线程...

  • GCD 相关函数

    串行同步 串行异步 并行同步 并行异步 主队列同步 会死锁 主队列异步 异步处理耗时,回主线程刷新UI 栅栏函数 ...

  • IOS多线程总结

    目录 简述 NSThread GCD操作与队列异步操作并行队列同步操作并行队列同步操作串行队列异步操作串行队列队列...

  • 多线程的运用

    同步串行队列 同步并发队列 异步串行队列 异步并发队列 队列组 栅栏 队列组和栅栏的组合 信号量 死锁主线程 分析...

网友评论

      本文标题:各种队列、同步、异步

      本文链接:https://www.haomeiwen.com/subject/lurfnxtx.html