美文网首页
第三章3.1GCD概要

第三章3.1GCD概要

作者: MrSYLong | 来源:发表于2018-07-25 21:47 被阅读5次

3.1.1 什么是GCD?
GCD是异步执行任务的技术之一。
开发者把想执行的任务追加到适当的队列中,GCD就能生成线程并计划执行任务。
线程管理是作为系统的一部分来实现,所以可统一管理,也可执行任务,比之前的线程,如NSThread,更有效率。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
    /* 异步执行 */
    dispatch_async(dispatch_get_main_queue(), ^{
        
        /* 主线程执行 */
    });
});

performSelector系多线程常用方法

- (void)doWork
{
    [self performSelectorInBackground:@selector(doSomeThingInBanckGround) withObject:nil];
}

- (void)doSomeThingInBanckGround
{
    /* 异步执行 */
    [self performSelectorOnMainThread:@selector(doSomeThingInMainThread) withObject:nil waitUntilDone:NO];
}

- (void)doSomeThingInMainThread
{
    /* 主线程执行 */
}

perfromSelector系多线程其他一些方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg;

- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg;

3.1.2 多线程编程(利用多线程编程的技术)
问题一、线程是什么?
条件:一个CPU一次只能执行一个命令,不能执行某处分开的并列的两个命令,所以CPU执行的CPU命令列就好比一条无分叉的大道,执行不会出现分叉。
“一个CPU执行的CPU命令列为一条无分叉路径”,即为“线程”。

问题二、多线程是什么?
条件:现在一个物理CPU芯片实际有64个(64核)CPU,一个CPU核可以虚拟两个CPU核工作。所以可以使用多个CPU核,但“一个CPU执行的CPU命令列为一条无分叉路径”不变。
同时存在多条无分叉路径,即为多线程。在多线程中,一个CPU核执行多条不同路径上的不同命令。(通过下面要讲的上下文)。

问题三、一个CPU核一次只能执行一个CPU命令,怎样实现在多条路径中执行CPU命令?
上下文切换:iOS、OS X内核在发生系统事件时,会切换执行路径。在执行中的路径的状态,如CPU的寄存器等信息保存到各自路径专用的内存块中,从切换目标路径的专用内存中,复原CPU寄存器等信息,继续执行切换路径(切换到的目标路径)的CPU命令列。
一个CPU:使用多线程的程序是在某个线程和其他线程之前反复进行上下文切换,看上去并列执行多线程一样。
多个CPU:真的提供多个CPU核并行执行多个线程。

问题四、多线程编程的问题?
1、多个线程同时更新一个相同的资源会导致数据的不一致,(数据竞争)
2、多个线程相互等待,(死锁)
3、使用太多线程会消耗大量内存

问题五、使用多线程编程的原因?
使用多线程编程可保证应用程序的响应性能。
在主线程进行长时间的处理,会妨碍主线程中被称为RunLoop的主循环的执行,导致不能更新用户界面,应用程序的画面长时间停滞等问题。

问题六、多线程编程优点?
1、使用多线程编程,在执行长时间的处理仍可保证应用程序的响应性能。
2、GCD大大简化复杂的多线程编程的源代码。

相关文章

  • 第三章3.1GCD概要

    3.1.1 什么是GCD?GCD是异步执行任务的技术之一。开发者把想执行的任务追加到适当的队列中,GCD就能生成线...

  • 联机共读11期 - 5.3 - 刘学承

    重新认知“场景” ——《流量池》第三章读书笔记 一、内容梳理(第三章) 概要 第三章比较具体,作者主要用神舟专车作...

  • Foundaiton(基礎)トレーニング

    レッスン1- UiPath概要 第二章 第三章 第四章 第五章 。。。

  • 《别人怎么对你,都是你教的 第30天3章8节》

    第30天读书概要: 第三章:穿越沟通屏障 第8节:最好的婚姻是,看得见你的关系模式 1.我们很容易看到别人,却看不...

  • 《别人怎么对你,都是你教的 第29天3章7节》

    第29天读书概要: 第三章:穿越沟通屏障 第7节:输了你,赢了世界又如何 1.人无完人,想要一份幸福美好的感情,不...

  • 概要

    约伯,在肉体与财富上历经辛苦,诅咒人类命运。这是一部宏伟史诗。他的朋友到来,而后撕扯他们的衣服,在上帝面前剖析约伯...

  • 概要

    Spring Cloud Config 项目 提供 服务端 和 客户端 支持 集中式 管理分布式环境下的应用配置 ...

  • 概要

    此系类为PHP后台开发的笔记 备注:此次是以实战为主(跟着视频学习,所以更加实用,当然也会忽略许多的细节) 1.A...

  • 概要

    概要 IdentityServer3被打包成一个OWIN的中间件,使用经典的选项(options)模式来配置: I...

  • 概要

    概要你现在应该有一个基本的了解Atom是什么,你想要做什么。 您还应该将它安装在您的系统上,并能够使用它进行最基本...

网友评论

      本文标题:第三章3.1GCD概要

      本文链接:https://www.haomeiwen.com/subject/azexmftx.html