zoukankan      html  css  js  c++  java
  • 多线程总结

    多线程-----充分发挥多核处理器的优势

    selector:选择器  perform:执行 detach:派遣

    Invocation:调用 dependency:依赖 application:应用

    进程-应用程序,负责开辟一块内存区域,共应用程序执行,每一个进程都默认有一个主线程

    线程-要执行的任务流

    什么是多线程:1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。

    线程中的串行:1个线程中任务的执行是串行的。

    -----NSThred-------

    -NSThred  每个对象是个线程 真正的多线层 /线程

    -----NSOperation-------

    英语:Operation:操作Queue:队列

    -NSOperation/NSOperationQueue 面向对象的线程技术

      ios2.0后就有了

    NSOperation有两个子类 NSInvocationOperation/NSBlockOpration

    //操作步骤

    新建一个队列-》队列添加线程(addOperationWithBlock)

    //将线程添加到主队列

    [NSOperationQueue mainQueue]addOperationWithBlock

    //制定最大线程数

    队列.maxConcurrentOperationCount=2

    -----GCD-------

        //英语:Grand:最重要的 Central:核心的 Dispatch:派遣

         global:全局 async:异步 sync:同步

    //-GCD-Grand Central Dispatch  ios4.0后出的GCD  C语言框架

    使用步骤  (写代码都是Dispatch开头的)

    1/全局队列 (可能开启多条线程)

       建队列--》建立异步/同步执行Block里面写(可并行执行几个顺序无先后,可在主队列中执行)

    //创建队列 

    dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //将异步线程添加到队列

    dispatch_async(queue, ^{

        [self GCDWithMessage:@"huohuo"];

    });

    //将线程添加到群组,后统一得到通知

    创建群组-》将线程添加到群组-》获得通知

    dispatch_group_t group=dispatch_group_creat()

    dispatch_group_notify(group,queue,^){}

    //利用GCD实现图片的内存缓存技术,

    //内存缓存,就是再次运行时,需从网络上从新下载图像(例如:装进了数组)

    //磁盘缓存:将数据写进沙盒,缺点如果网络上的图片变化了,可能无法及时更新,所以使用磁盘缓存是需要更多的网络缓存技术。

    //第三方框架 SDY Image 解决缓存问题的第三方框架

       //主线程不能写同步(sync)

    2/串行队列 (只可能开启一条线程)

      为决绝线程执行顺序的问题

    dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);

      串行队列是creat的 建队列——》添加队列

    3/更新UI界面的操作在主队列里面做

    dispatch_async(dispatch_get_main_queue(), ^{

        [self addMessage:str];//更新UI

    });

    4/主队列

    dispatch_get_main_queue();

    instance:实例

    -------单例模式-------

    1:定义:保证内存中只有类的单个实例,在一个类中,怎么创建只有一个实例化对象

    1.0:单例操作步骤

    创建静态变量-》在allocWithZone方法里面用GCD 包装实例化对象-》编写share方法以便管理

    1.1:在类方法里面,想使用成员变量,static 定义

    + allcWithZone:(struct _NSZone *)zone

    {

      1.2://这种方法只支持在单线程里面使用

    //   if (_instance=nil)

    //       _instance=[super allcWithZone];

        

      1.3://这种方法只支持在多线程里面使用 dispatch_once_t GCD为决绝多线程单例问题提供的

           

           static dispatch_once_t onceToken;

        dispatch_once(&onceToken,^){

            _instance=[super allcWithZone];

            });

        return _instance;

    }

    -------互斥锁的使用原则------

    synchronize:使同时发生

    1:被抢夺的属性要为原子属性(atomic)

    2:读取原子属性的代码处,使用互斥锁

    //保证一个人进一次

    ps:用互斥锁严重影响系统性能,日常少用

    @synchronized(self){}互斥锁

  • 相关阅读:
    ResGen.exe 生成resources文件方法 [转]
    C#【Winform】带参启动外部EXE
    SBO的5个开发原则机遇只给有准备的人[转]
    在SQL中插入临时表时使用自动增长的数据字段
    c# 强制退出
    C#实现SQL全库检索数据比较使用DataReader与DataAdapter+Datatable效率,差距惊人!
    推荐一个C#代码混淆器 .NET Reactor
    面向对象软件设计——设计模式学习
    AbstarctFactory模式——设计模式学习
    插入排序算法(直接,折半,希尔)
  • 原文地址:https://www.cnblogs.com/ly1973/p/5394379.html
Copyright © 2011-2022 走看看