async

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

故事扮演 提交于 2020-04-03 05:30:24
介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个函数(function)或者是一个 block 。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行 dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。 Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。 Main dispatch queue 它是全局可用的serial queue,它是在应用程序主线程上执行任务的。

IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

╄→尐↘猪︶ㄣ 提交于 2020-04-03 05:30:02
IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行 dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。 Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。 Main dispatch queue

IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

社会主义新天地 提交于 2020-04-03 05:29:44
Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行 dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。 Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。 Main dispatch queue 它是全局可用的serial queue,它是在应用程序主线程上执行任务的。 我们看看dispatch

iOS多线程——GCD篇

左心房为你撑大大i 提交于 2020-04-03 05:25:54
什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效。 在GCD出现之前Cocoa框架提供了NSObject类的 performSelectorInBackground:withObject performSelectorOnMainThread 方法来简化多线程编程技术。 GCD可以解决以下多线程编程中经常出现的问题: 1.数据竞争(比如同时更新一个内存地址) 2.死锁(互相等待) 3.太多线程导致消耗大量内存 在iOS中,如果把需要消耗大量时间的操作放在主线程上面,会妨碍主线程中被称为RunLoop的主循环的执行,从而导致不能更新用户界面、应用程序的画面长时间停滞等问题。 Dispatch Queue Dispatch Queue是GCD中对于任务的抽象队列(FIFO)执行处理。 queue分为两种, SERIAL_DISPATCH_QUEUE           等待现在执行中处理结束 CONCURRENT_DISPATCH_QUEUE       不等待现在执行中处理结束 换句话说也就是 SERIAL_DISPATCH_QUEUE 是串行,CONCURRENT_DISPATCH_QUEUE是并行。 具体到线程上,就是SERIAL_DISPATCH

iOS多线程GCD

懵懂的女人 提交于 2020-04-03 05:22:56
GCD是和block紧密相连的,所以最好先了解下block。GCD是C level的函数,这意味着它也提供了C的函数指针作为参数。 下面首先来看GCD的使用: dispatch_async(dispatch_queue_t queue, dispatch_block_t block); async表明异步运行,除了async,还有sync(同步),delay(延时) block代表的是你要做的事情, queue则是你把任务交给谁来处理了. dispatch_async 这个函数是异步的,这就意味着它会立即返回而不管block是否运行结束。因此,我们可以在block里运行各种耗时的操作(如网络请求) 而同时不会阻塞UI线程。 之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI。为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程。 GCD里就有三种queue来处理. 1. Main queue:   顾名思义,运行在主线程,由dispatch_get_main_queue获得。和UI相关的就要使用Main Queue. main dispatch queue 是一个全局可用的串行队列,其在行用程序的主线程上执行任务。此队列的任务和应用程序的主循环(run loop)要执行的事件源交替执行。因为其运行在应用程序的主线程,main

GCD简介

谁说胖子不能爱 提交于 2020-04-03 05:22:05
本文转自 http://www.cnblogs.com/sell/archive/2013/02/06/2905772.html GCD ( Grand Central Dispatch ) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式。 在Mac OS X 10.6和IOS 4.0之后开始支持GCD。 使用GCD的一个理由就是方便。回想一下以前的多线程编程,我们会把异步调用的代码放到另外的一个函数中,并通过NSThread开启新线程来启动这段代码。 这种跳来跳去的流程对于复杂的逻辑简直就是一场灾难。更糟糕的是,调用线程时的环境对异步代码是不可见的,如果我们需要当时的临时变量的话只有两个选择: 保存到类成员变量中或者作为参数传递过去。前者会造成很多莫名奇妙的无关类成员,而后者的功能过于有限。 GCD相对来说是一种更优雅的方式,看如下代码: NSString* parameter = [self getSomeParameter]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString* result = [self fetchResultFromWebWithParameter:parameter];

UIRecorder环境搭建及录制实现

烈酒焚心 提交于 2020-04-01 06:32:05
前天看TesterHome提到UI录制做UI自动化,很感兴趣,前来学习学习。 参考: https://github.com/alibaba/uirecorder/blob/master/doc/zh-cn/readme.md UIRecorder是一款基于WebDriver、Chrome浏览器、NodeJs等方案共同打造的零成本自动化解决方案。 基于几乎零成本的录制方案,我们让任何一个完全没有自动化经验的人,可以1分钟录制出可读性高,且强大的自动化脚本。 让所有开发和测试能够最低成本的获得自动化测试的能力,把重复又枯燥的测试工作全部交给计算机,彻底的提高测试效率,解放我们的生产力。 UIRecorder安装 1. 安装 jdk 2. 安装 node.js ,同时安装了 npm, 需要 加上环境变量 3. 安装 cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 4. 安装 uirecorder cnpm install uirecorder mocha -g 安装相关依赖: cnpm install jwebdriver expect.js mocha-generators faker --save-dev 5. 下载 selenium-standalone 和 selenium-server

iOS-关于GCD信号量那些事儿

随声附和 提交于 2020-03-30 19:55:48
随便说说 其实GCD大家都有接触过,也不在解释GCD是什么,为什么突然想说信号量问题,最近这几次面试,当我问到面试者怎么处理多个请求完成后的一系列操作时,有的说造一个临时变量的做追加,其实这样可以,也算是信号量的基本逻辑,有的说用线程做延时操作,怎么延时,怎么操作说的不清楚,有少部分会提到GCD信号量,但是可能说不出来怎么操作,通过信号量的增加与递减,进行网络的并发请求,最后再做网络请求完成后的最终处理;其实实际上大家在做的时候,在网上一搜,基本都能找到; GCD信号量的应用场景,一般是控制最大并发量,控制资源的同步访问,如数据访问,网络同步加载等 简单聊聊 ///创建 dispatch_semaphore_create() ///增加 dispatch_semaphore_signal() ///减去 dispatch_semaphore_wait() 下面用简单的栗子模拟多个网络请求,再进行最终的操作 //创建信号量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //创建队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //创建线程组 dispatch_group_t group = dispatch_group_create(

identityserver4源码解析_3_认证接口

别等时光非礼了梦想. 提交于 2020-03-28 03:51:47
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4源码解析_4_令牌发放接口 identityserver4源码解析_5_查询用户信息接口 identityserver4源码解析_6_结束会话接口 identityserver4源码解析_7_查询令牌信息接口 identityserver4源码解析_8_撤销令牌接口 协议 五种认证方式 Authorization Code 授权码模式 :认证服务返回授权码,后端用clientid和密钥向认证服务证明身份,使用授权码换取id token 和/或 access token。本模式的好处是由后端请求token,不会将敏感信息暴露在浏览器。本模式允许使用refreshToken去维持长时间的登录状态。使用此模式的客户端必须有后端参与,能够保障客户端密钥的安全性。此模式从authorization接口获取授权码,从token接口获取令牌。 Implict 简化模式 :校验跳转URI验证客户端身份之后,直接发放token。通常用于纯客户端应用,如单页应用javascript客户端。因为没有后端参与,密钥存放在前端是不安全的。由于安全校验较宽松

Cowboy 开源 WebSocket 网络库

馋奶兔 提交于 2020-03-26 11:36:07
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Protocol) 协议标准,并部分实现了 RFC 7692 (Compression Extensions for WebSocket) 协议标准。 WebSocket 可理解为建立在 TCP 连接通道上的更进一步的握手,并确定了消息封装格式。 通过定义控制帧 (Control Frame) 和数据帧 (Data Frame) 来控制通道内的通信和数据传输,下图用使用 ABNF 格式描述了帧头部的格式。 Cowboy.WebSockets 中对于 WebSocket 的 Client/Server 分别做了实现,分别对应代码中的: AsyncWebSocketClient AsyncWebSocketServer Cowboy.WebSockets 的内部实现是基于 Cowboy.Sockets 中的 TAP 模式的 AsyncTcpSocketServer 和 AsyncTcpSocketClient 。关于 Cowboy.Sockets 可以参考文章《 C#高性能TCP服务的多种实现方式 》。 可通过 NuGet 查找 Cowboy 来获取 nuget 包。 WebSocket