GCD之异步同步体会

前面的博文也有写到同步异步,可能是看他人的博文,自己没有实验,感觉理解不深,所以就敲了些代码比较一下串行、并行分别对应的同步、异步。

1.首先创建串行、并行线程队列


dispatch_queue_t serialqueue=dispatch_queue_create("serialqueue", DISPATCH_QUEUE_SERIAL);//串行线程队列

dispatch_queue_t concurrentqueue=dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);//并行线程队列

2.并行线程队列的同步、异步的比较


dispatch_async(concurrentqueue, ^{

       NSLog(@"5a");

   });

   NSLog(@"6a");

   dispatch_sync(concurrentqueue, ^{

       NSLog(@"5");

   });

   NSLog(@"6");

 运行结果:6a和5a的顺序不定, 5 和6的顺序始终是一样的

将上面的代码稍微修改,分别改为都是同步、都是异步、一个同步一个异步四种情况,运行查看结果基本能体会出同步的异步的区别。

3.串行线程队列的同步异步


dispatch_async(serialqueue, ^{

        NSLog(@"5a");

    });

    dispatch_async(serialqueue, ^{

        NSLog(@"5aa");

    });

    dispatch_async(serialqueue, ^{

        NSLog(@"5a1");

    });

    NSLog(@"6a");

    dispatch_sync(serialqueue, ^{

        NSLog(@"5");

    });

    NSLog(@"6");

 运行结果:

同样多改变同步异步方式,多测试一下,就能感受体会到同步异步的区别。

个人体会:同步:则会阻塞当前线程,等待block添加到指定的线程运行完才返回。异步则不会阻塞当前线程,block则会在后台添加到指定的线程运行。

时间: 2024-09-18 13:45:46

GCD之异步同步体会的相关文章

数据同步-C/S架构的数据库异步同步问题

问题描述 C/S架构的数据库异步同步问题 开发语言:C# 数据库:sql server 想实现功能: 把服务器上的数据库down到本地,客户端使用时操作本地数据库,固定时间或服务器数据库连通的情况下,将本地数据同步到服务器的数据库中. 目的:在服务器关闭.或断网情况下,可以保证客户端使用的稳定性. 希望大神们指点迷津,提供一些可行性方案,十分感谢! 解决方案 关键看你的业务需求. 比如说电子词典完全可以离线工作,在线更新词库. 但是银行卡pos刷卡就绝对不能离线工作. 没有什么一劳永逸的办法,你

Innodb:如何计算异步/同步刷脏及checkpoint的临界范围

本文主要是记录Innodb在初始化日志子系统时,如何计算异步/同步刷脏或checkpoint的临界范围 代码分析基于MySQL 5.6.11 /////////////////////////////////////////////////////////////////////////////////////////////// 相关配置为: innodb_log_buffer_size=200M innodb_log_file_size=1000M innodb_log_files_in_g

支持异步同步的分布式CommandBus MSMQ实现:支持Session传递、多实例处理

先上一张本文所描述的适用场景图 分布式场景,共3台server: 前端Server Order App Server Warehouse App Server 功能: 前端Server可以不停的发送Command到CommandBus,然后由CommandBus分配不 同的Command到各自的app server去处理. 前端Server可以只发送Command而不必等待Response 前端Server可以同步等待Response返回 MSMQ消息超过3.5M会自动转为网络共享方式传输消息

在asp.net页面中使用异步同步rss

有的时候我们需要在网页里读取论坛的信息,在传统ASP的时候我们使用的是JS或者是IFRAME,这两种方式都不是很方便,而且对搜索引擎不友好.现在有了.Net,我们有了另一种方式. 要求:论坛需要提供RSS支持. 代码如下: #region task class //这是一个任务类,执行具体的任务 public class RssAsyncTask { private String _rssContent; private AsyncTaskDelegate _dlgt; private stri

asp调用vb生成的dll文件,执行shell异步变同步的解决方法(带源代码)

vb|解决|源代码|执行|shell|异步|同步 阿里西西web开发团队在开发一个asp系统,需要同步调用vb(dll)执行的shell操作,asp->vb(dll)->shell->rar.exe同步执行exe文件. 由于shell是异步处理,这个问题让我们头疼了很久,最终还是通过百度找到了几个不错的函数,调试过,效果还不错,建议可以先用vb建exe来调试好了,再放入DLL编译给ASP调用. 代码如下: 以下是用vb制作一个exe文件进行调试,打开记事本和计算器示例:Private T

C#.net同步异步SOCKET通讯和多线程总结

多线程|异步 同步套接字通信 Socket支持下的网上点对点的通信 服务端实现监听连接,客户端实现发送连接请求,建立连接后进行发送和接收数据的功能 服务器端建立一个socket,设置好本机的ip和监听的端口与socket进行绑定,开始监听连接请求,当接收到连接请求后,发送确认,同客户端建立连接,开始与客户端进行通信. 客户端建立一个socket,设置好服务器端的IP和提供服务的端口,发出连接请求,接收到服务的确认后,尽力连接,开始与服务器进行通信. 服务器端和客户端的连接及它们之间的数据传送均采

不同js异步函数同步的实现方法_javascript技巧

不同函数达到同步的函数模拟 funcList是函数执行函数的队列,其中回调函数中flag=true是同步标记量 <script> var flag = false; function funcTest(t,func){ setTimeout(function(){ (function(param){ console.log(param); func(); }(t)); },t*1000); } var funcList = []; funcList.push(function(){funcTe

浅谈socket同步和异步、阻塞和非阻塞、I/O模型_php技巧

在进行网络编程时,常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式 同步/异步主要针对C端: 同步:c端发出一个功能调用时,在没有得到结果之前,c端死等结果 例如:普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:c端一个异步过程调用发出后,调用者不会立刻得到结果.实际处理这个调用的部件在完成后,通过状态.通知和回调来通知调用者. 例如:ajax请求(异步): 事件触发->服务

Socket通讯 这个算是同步还是异步?

问题描述 两个家伙一个A一个BA连BA说:给我干一件事B说:知道了A与B断开过一会儿B连AB说:事情干完了A说知道了:B与A断开从各步骤的行为来看,符合一问一答,该算同步但是把整个过程连起来,又符合告知后不管,过会儿收到结果.那么严格的讲这应该算同步还是异步哪? 解决方案 解决方案二:这是应答的通讯方式,一方要收到另一方的回答后才进行下面的动作,这个和异步同步不是一个概念,你可以理解为同步吧,因为两方是有牵制的解决方案三:如果B收到指令后,忙碌,立马反馈干不了=即时:如果B收到指令后,忙碌,任务