4.多任务

2021-09-26  本文已影响0人  LucXion

多任务最基本的形式就是运行循环,运行循环可以理解为一个大的do/while循环,它运行在某个线程中,从各种事件队列中取得一个事件(每次一个),然后把它分派给合适的监听器

通常项目中引入少量长期线程来处理网络请求、数据库操作、计算,这意味着加锁,加锁代价昂贵,并且可能导致大量bug。如果创建短期线程,虽然对锁的需求降低了,但是创建线程成本很高,我们需要管理一个线程池。操作一般有依赖关系,所以我们期望有队列,如果能让 操作系统来处理线程池和队列 就更好了,这就是 NSOperation。你不用操心信号量和互斥锁机制。GCD 常用栅栏、调度组。

分派队列是严格的先进先出结构,如果要在队列中使用优先级或者调整块的顺序,必须使用NSOperation

分派队列就是队列,队列不是线程,队列也不接受块,队列组织块。dispatch_async不会让块运行,只是将块 添加 到队列中

高优先级队列插队

    // 
    dispatch_queue_t low = dispatch_queue_create("low", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_t high = dispatch_queue_create("high", DISPATCH_QUEUE_SERIAL);
    dispatch_set_target_queue(low, high);
    dispatch_async(low, ^{
        NSLog(@"低优先级区块%ld",(long)self.time);
    });
    dispatch_suspend(low);
    dispatch_async(high, ^{
        NSLog(@"高优先级区域%ld",(long)self.time);
        dispatch_resume(low);
    });
上一篇下一篇

猜你喜欢

热点阅读