多线程----派遣组技术 dispatch_group_t group

派遣组允许组织线程知道一个或者多个任务执行完成。

如果有一种场景,比如在队列中的任务没有执行完之前,主线程不应该继续往下运行,此时就可以使用派遣组技术来让一个或者多个队列等待执行完毕后再返回主线程。

下面的例子显示了创建派遣组的基本用法:

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, queue, ^{
        //执行一些异步的工作
    });
    
    //一些其他的处理
    
    //在派遣组中等待,阻止当前的线程继续执行
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

将队列以及任务添加进组,使用方法dispatch_group_async,第11行调用了dispatch_group_wait方法等待所有组内的任务结束后才会返回。

------------源自《ios应用开发最佳实践》

时间: 2024-08-08 01:28:33

多线程----派遣组技术 dispatch_group_t group的相关文章

iOS有三种多线程编程的技术

1.NSThread 2.NSOperationQueue 3.GCD Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限.你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销.在 iOS 中我们可以使用多种形式的 thread: Cocoa threads: 使用NSThread 或直接从 NSObject 的类方法 perfo

Java进阶(三)多线程开发关键技术

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/java/multi_thread/ sleep和wait到底什么区别 其实这个问题应该这么问--sleep和wait有什么相同点.因为这两个方法除了都能让当前线程暂停执行完,几乎没有其它相同点. wait方法是Object类的方法,这意味着所有的Java类都可以调用该方法.sleep方法是Thread类的静态方法. wait是在当前线程持有wait对象锁

QEMU-KVM中的多线程压缩迁移技术

QEMU-KVM中的多线程压缩迁移技术 导读 目前的迁移技术,都是通过向QEMUFILE中直接写入裸内存数据来达到传送虚拟机的目的端,这种情况下,发送的数据量大,从而会导致更高的迁移时间(total time)和黑宕时间(downtime).本文介绍的方法,在发送前对客户机内存进行压缩,在目的端接收到内存后,进行对数据进行解压缩,从而恢复客户机的内存. 1.技术原理 使用带压缩技术的迁移后,传输的数据总量会减少60%,总迁移时间减少70%+,同时宕机时间减少50%以上.一方面,压缩/解压缩的过程

Java--使用多线程下载,断点续传技术原理(RandomAccessFile)

一.基础知识 1.什么是线程?什么是进程?它们之间的关系? 可以参考之前的一篇文章:java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器 简单说一个进程可以由多个线程组成,一个操作系统可以多个进程,它们都是可以同时进行工作的. 2.什么是下载?如何多线程进行下载?如何断点续传? 广义上说,凡是在屏幕上看到的不属于本地计算机上的内容,皆是通过"下载"得来.狭义上人们只认为那些自定义了下载文件的本地磁盘存储位置的操作才是"

Linux - 有效群组(effective group)与初始群组(initial group),groups,newgrp

每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID ,那个 GID 就是所谓的『初始群组 (initial group) 』!也就是说,当用户一登陆系统,立刻就拥有这个群组的相关权限的意思. 举例来说,我们上面提到 dmtsai 这个使用者的 /etc/passwd 与 /etc/group 还有 /etc/gshadow 相关的内容如下: [[email protected] ~]# usermod -G users dmtsai <==先配置好次要群组 [[email p

账户(/etc/passwd、/etc/shadow)与组(/etc/group、/etc/gshadow)文件解析

1. 账户信息文件 账户信息被保存在 /etc/passwd 文件中,通过命令 cat /etc/passwd 查看文件内容如下: [[email protected] ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7

多线程 线程组

1 package org.zln.thread; 2 3 import java.util.Date; 4 5 /** 6 * Created by sherry on 000024/6/24 22:30. 7 */ 8 public class TestThreadGroup { 9 public static void main(String[] args) throws InterruptedException { 10 ThreadGroup group1 = new ThreadGr

Java多线程 - 线程组

Java使用ThreadGroup来表示线程组,用以对一批线程进行分类管理. Java允许程序对线程组直接进行控制,对线程组的控制相当于同时控制这批线程: 用户创建的所有线程都属于指定线程组,如果程序没有显式指定线程属于哪个线程组,则该线程属于默认线程组: 默认情况下,子线程和创建它的父线程处于同一个线程组内: 一旦某个线程加入指定线程组后,该线程将一直属于该线程组,直到该线程死亡,线程不能中途改变它所属线程组. ThreadGroup内定义了一个比较有用的方法:void uncaughtExc

Chromium中多线程及并发技术要点(C/C++)

类别 类 说明 示例 线程机制 Thread (参考:线程模型及应用指南)   MessagePump   MessageQueue   SequencedWorkerPool 它是一个线程池,用于执行需要串行执行的任务请求,这些请求依据不同的Token分组,只在相同组内保证执行顺序. 这样多个组可以并行执行,而单个组则是串行执行.比如:不同实例所对应的分组不同,或者不同的功能对应不同的分组. 它同时允许指定当退出时未执行的任务如何处理,包括:继续执行,忽略,阻止退出. 参考:The FILE