OC 知识点之并发编程

001 线程

运行时执行的一组指令序列.进程启动时的主要线程被称为主线程.所有的UI的元素都需要在主线程中创建和管理.

002 线程开销

时间开销 内核消耗 (内存空间)

003 内核数据结构

每个线程大约消耗1KB的内核空间.这块内存用于存储与线程有关的数据结构和属性,这块内存是联动内存.

004 栈空间

主线程的栈空间1M,而且无法修改.所有的二级线程默认分配512KB的栈空间.栈空间的大小可以改变.栈空间的最小值的16KB ,而且数值必须是4KB倍数.

005 GCD功能列表

任务或分发队列,允许主线程中执行.并行执行的串行执行.

分发组,实现对一组任务柱形的情况的跟踪,而与这些任务所基于的队列无关

信号量

屏障,允许在并行分发队列中创建同步的点

分发对象和管理源,实现更为底层的管理和监控

异步I/O,使用文件描述符合管道

 

006 操作与队列

NSOperation封装额一个任务以及和任务相关的数据和代码.而NSOperationQueue以先入先出的顺序控制一个或者多个这类任务的执行.可用maxConcurrentOperationCount属性控制队列.

NSTHread(开发人员管理全部并发)和GCD(OS管理并发)

GCD

  抽象程度最高

   两种对罗列开箱即用:main global

   可以创建更多队列(使用dispatch_queue_create)

   可以请求独立访问(占用dispatch_barrier_sync和dispatch_barrier_async)

   基于线程管理

   硬性限制创建64个线程

NSOperationQueue

  无默认队列

  应用管理自己的创建的队列

  队列是优先级队列

  操作可以有不同的优先级(queuePriority属性)

  使用cancel消息可以取消操作,cancel仅仅是个标记,如果操作已经开始执行,则可能会继续执行下去

  可以等待某个操作执行完毕(使用waitUntilFnished消息)

NSThread

  低级别构造,最大控制

  应用创建并管理线程

  应用创建并管理线程池

  应用启动线程

  线程可以拥有优先级,操作系统会根据优先级调度它们的执行

无直接API用于等待线程完成,需要使用互斥量(如NSLock)和自定义代码

原子属性

如果一个属性是atomic,则修改和读取肯定都是原子的.这样可以阻止两个线程同时更新一个值,反之则有可能导致错误的状态,正在修改属性的线程必须处理完毕其他线程才能开始处理.很多属性都是原子性,如果能够保证某个属性在任何时刻都不会被多个线程访问,那最好还是将其标记为nonatomic.

将属性类型设置成atomic@property (atomic, copy) NSString *lastName;

使用@synchronized指令可以创建一个信号量,并进入临界区,临界区在任何时刻都只能被一个线程执行.取得对self的对象所,一切相关的修改都会被一同处理,而不会发生竞争状态.这样任然能够高并发执行,代码即实现了高并发,有设置警戒线以防止数据冲突.

还有三种所保持线程安全:NSLock NSRecursiveLock NSCondition

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值