异步函数

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"touchesBegan");

// 异步函数 + 主队列

// 结论:1.不会开启新线程

//     2.任务按顺序执行

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"耗时操作1:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"耗时操作2:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"耗时操作3:%@",[NSThread currentThread]);

});

NSLog(@"touchesEnd");

}

// 异步函数 + 并发队列

// 任务在子线程执行/会开启多条新线程

// 任务同时执行

// 并不是有多少任务就开启多少线程.

- (void)test2

{

// 异步函数 + 并发队列

// 任务在子线程执行/会开启多条新线程

// 任务同时执行

// 并不是有多少任务就开启多少线程.

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作1:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作2:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作3:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作4:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作5:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作6:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作7:%@",[NSThread currentThread]);

});

dispatch_async(dispatch_get_global_queue(0, 0), ^{

NSLog(@"耗时操作8:%@",[NSThread currentThread]);

});

}

// 异步函数 + 串行队列

// 结论: 1.开启一条线程,任务在新线程中执行.

//       2.任务按顺序执行,在同一条子线程执行.

//       3.一个队列对应一条线程

- (void)test1

{

// 异步函数 + 串行队列

// 结论: 1.开启一条线程,任务在新线程中执行.

//       2.任务按顺序执行,在同一条子线程执行.

//       3.一个队列对应一条线程

dispatch_queue_t serialQueue1 = dispatch_queue_create("", DISPATCH_QUEUE_SERIAL);

dispatch_queue_t serialQueue2 = dispatch_queue_create("", DISPATCH_QUEUE_SERIAL);

dispatch_async(serialQueue1, ^{

NSLog(@"耗时操作1:%@",[NSThread currentThread]);

});

dispatch_async(serialQueue2, ^{

NSLog(@"耗时操作2:%@",[NSThread currentThread]);

});

dispatch_async(serialQueue2, ^{

NSLog(@"耗时操作3:%@",[NSThread currentThread]);

});

dispatch_async(serialQueue1, ^{

NSLog(@"耗时操作4:%@",[NSThread currentThread]);

});

}

@end

时间: 2024-07-28 12:57:36

异步函数的相关文章

cuda 异步函数

为了提高cuda效率使用异步函数是一个很常规的选择,但是异步函数并没有我自己想象的这么智能. 它要你要异步传输的数据在主机端(host)不能被更改,即异步函数只是指示了一个传输的位置指针,并没有对这个数据进行缓存,到真正需要的时候,才会去主机内存中去寻找这个值.所以在做异步的时候要保证异步传输的主机端不能在异步完成(或者说拷贝完成)之前被修改.要不然这个数据就成了修改后的了. 实验代码如下 #include <stdio.h> #include <cuda_runtime.h> _

获取JavaScript异步函数的返回值

今天研究一个小问题: 怎么拿到JavaScript异步函数的返回值? 1.错误尝试 当年未入行时,我的最初尝试: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script> function getSomething() {  var r = 0;  setTimeout(function() {  r = 2;  }, 10);  return r; } function compute() {  var x = getSomething();  alert

.Net异步函数存在的限制

本文摘录自CLR Via C# 第四版. 异步函数存在以下限制: 1.不能讲应用程序的Main方法转变成异步函数.另外,构造器.属性访问器方法和时间访问器方法不能转变成异步函数. 2.异步函数不能使用任何out或ref参数. 3.不能再catch,finally或unsafe快中使用await操作符. 4.不能再await操作符之前获得一个支持县城所有权或递归的锁,并在await操作符之后释放它.这是因为await之前的代码由一个线程执行,之后的代码则由另一个线程执行.在C# lock语句中使用

同步函数与异步函数

依据微软的MSDN上的解说: (1)   同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回. (2)   异步函数:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成. (3) 在一个线程中分别调用上述两种函数会对调用线程有何影响呢? 当一个线程调用一个同步函数时(例如:该函数用于完成写文件任务),如果该函数没有立即完成规定的操作,则该操作会导致该调用线程的挂起(将CPU的使用权交给系统,让系统分配给其他线程使用

tornado.gen.coroutine-编写异步函数

异步函数: 1. 返回Future 2. 必须有set_result( )或者set_exception( )调用. 这里展示一个异步socket读取的例子: 首先定义一个定时返回的服务器,来模拟耗时的操作 from tornado.tcpserver import TCPServer from tornado import ioloop from tornado import gen  from tornado.concurrent import Future def sleep(durati

ES2017异步函数现已正式可用

ES2017标准已于2017年6月份正式定稿了,并广泛支持最新的特性:异步函数.如果你曾经被异步 JavaScript 的逻辑困扰,这么新函数正是为你设计的. 异步函数或多或少会让你编写一些顺序的 JavaScript 代码,但是却不需要在 callbacks.generators 或 promise 中包含你的逻辑. 如下代码: function logger() {     let data = fetch('http://sampleapi.com/posts')     console.

Node.js用ES6原生Promise对异步函数进行封装

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.转载请注明来源http://blog.csdn.net/azureternite 目录(?)[+] Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初始状态,即等待操作的执行 fulfilled:成功的操作 rejected:失败的操作 pending的状态

js异步函数队列

场景: 做直播,会有入场消息,入场特效,用户如果有坐骑,需要给他展示几秒钟的坐骑特效,如果几个人同时进场,那该怎么展示呢?这时候就会想到setTimeout函数,对,思路不错,但是,异步函数队列怎么实现呢?直接上代码: var Queue = function() { this.list = []; }; Queue.prototype = { constructor: Queue, queue: function(fn) { this.list.push(fn) return this; },

异步函数封装请确保异步性(Javascript需要养成的良好习惯)

背景假设: 你有许多的配置信息存放在服务器上,因为配置太多,不希望每次都把所有的配置信息都写到前端,希望能需要用的时候再获取就好了. 因为Javascript单线程运行,你不希望堵塞ui渲染于是你专门写了个异步获取函数(ajax获取后台信息) var getConfig=function(key,callback){ $.get('/config/'+key,function(config){ callback(null,config); },'json');};//使用该函数getConfig