iOS-多线程的底层实现

  (1)首先回答什么是线程

  1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行

  (2)什么是多线程

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

  多线程的作用:更新显示UI界面、处理用户触摸事件。

  (3)Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程。

  (4)开发中实现多线程的方案

   1》C语言的POSIX接口:#include<pthread.h>

  2》OC的NSThread

  3》 C语言的GCD接口(性能最好,代码更精简)

  4》  OC的NSOperation和NSOperationQueue(基于GCD)

  2.线程的通信

  (1)GCD:

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 下载图片

UIImage *image = nil;

dispatch_async(dispatch_get_main_queue(), ^{

// 回到主线程

});

  (2)NSThread的线程通信

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

  // 下载图片

  UIImage *image = nil;

  [self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES modes:nil];

   }

  这种情况 也适用于子线程之间的通信。

  (3)NSThread的线程通信

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

  // 下载图片

  UIImage *image = nil;

  [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:YES];

  }

  3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题

   利用字典图片地址为key,下载操作为value

  4. 列举cocoa中常见对几种多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制?

  1》开发中实现多线程的方案

   1》C语言的POSIX接口:#include<pthread.h>

  2》OC的NSThread

  3》 C语言的GCD接口(性能最好,代码更精简)

  4》  OC的NSOperation和NSOperationQueue(基于GCD)

  2》多线程安全的解决方案

   1》只在主线程刷新访问UI

   2》如果要防止资源抢夺,得用synchronize进行加锁保护。

  3》如果异步操作要保证线程安全等问题,尽量使用GCD。(GCD有些函数默认就是安全的)

  5.GCD内部怎么实现的

   1》 iOS和OSX的核心是XNU内核(苹果电脑发展的操作系统内核),GCD是基于XNU内核实现的。

  2》GCD的API全部在libdispatch库中

  3》GCD的底层实现主要有:Dispatch Queue和Dispatch Source

  Dispatch Queue :管理block操作

  Dispatch Source:处理事件(比如说线程间的通信)

  6.GCD和NSOperationQueue

   1》GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本的封装

   2》GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,可以添加依赖设置最大并发数量。

   3》GCD的执行速度比NSOperationQueue快

  4》NSOperationQueue支持KVO,可以检测Operation是否正在执行,是否结束,是否取消。

  如何进行选择?

  任务之间不太相互依赖,选用GCD;

  任务之间有依赖,或者要监听任务的执行情况:NSOperationQueue

时间: 2024-10-14 07:02:24

iOS-多线程的底层实现的相关文章

关于iOS多线程的总结

关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let's begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分

线程同步-iOS多线程编程指南(四)-08-多线程

首页 编程指南 Grand Central Dispatch 基本概念 多核心的性能 Dispatch Sources 完结 外传:dispatch_once(上) Block非官方编程指南 基础 内存管理 揭开神秘面纱(上) 揭开神秘面纱(下) iOS多线程编程指南 关于多线程编程 线程管理 Run Loop 线程同步 附录 Core Animation编程指南 Core Animation简介 基本概念 渲染架构 几何变换 查看目录 中文手册/API ASIHTTPRequest Openg

iOS 多线程学习笔记 —— GCD

本文复制.参考自文章:iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 这里对原作者的辛勤工作表示感谢! 1. 简介 GCD (Grand Central Dispatch) 是建立任务并行执行的线程池模式的基础上的,以优化支持多核.多处理器系统

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术.以优化的应用程序支持多核心处理器和其它的对称多处理系统的系统.这建立在任务并行运行的线程池模式的基础上的.它首次公布在Mac OS X 10.6 ,iOS 4及以上也可用. 设计: GCD的工作原理是:让程序平行排队的特定任务.依据可用的处理资源,安排他们在不论什么可用的处理器核心上运行任务. 一个任务能够是一个函数(function)或者是一个block. GCD的底层依旧是用线程实现,只是这样能够让程序

iOS多线程技术—单例模式(ARC)与(MRC)

iOS多线程技术—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个. (3)单例模式在ARC\MRC环

iOS多线程编程(四)------ GCD(Grand Central Dispatch)

一.简介 是基于C语言开发的一套多线程开发机制,也是目前苹果官方推荐的多线程开发方法,用起来也最简单,只是它基于C语言开发,并不像NSOperation是面向对象的开发,而是完全面向过程的.如果使用GCD,完全由系统管理线程,我们不需要编写线程代码.只需定义想要执行的任务,然后添加到适当的调度队列(dispatch_queue).GCD会负责创建线程和调度你的任务,系统会直接提供线程管理. 二.任务和队列 GCD中有两个核心概念 (1)任务:执行什么操作 (2)队列:用来存放任务 GCD的使用就

iOS开发各种底层实现--面试必备!

iOS开发常用技术底层实现(精简概述) 本章将对ios开发技术底层实现的总结,其实关于ios开发中各种底层的实现,网上相关文章多到数不过来,而不且非常不错,我也没有自信我能比他们做的更好,因为毕竟每个人专研的东西不一样,本文主要正对三类用户! 资深的ios开发者,对底层做过专门研究,但是没有一个系统整理,或者说不能很清楚的表达. ios开发初学者,没有专门研究过底层或者相关源码的初学者,但是不太建议一开始就看,因为如果你没有过一点接触,看了也看不懂,或者看了也白看,最多就是留个印象在脑子了,对初

iOS多线程知识总结

iOS多线程知识总结 1. iOS中苹果提供4钟方案来帮助我们实现多线程: (1) 纯C语言的pthread,偏底层,需要程序员手动管理线程的生命周期,基本不用. (2) OC语言的NSTread,需要手动管理线程生命周期,偶尔调试用来获取当前线程[NSTread currentTread/mainTread]; (3) 纯C语言的GCD(Grand Central Dispatch伟大的中枢调度器),自动管理线程生命周期,完全隐藏了Tread字眼,面向任务和队列,有同步和异步函数,自动决定开启

IOS多线程操作

多线程的概念 进程 ·正在运行中的程序被成为进程,负责程序运行的内存分配 ·没一个进程都有自己独立的虚拟内存空间 线程 ·线程是进程中一个独立的执行路径也称之为控制单元 ·一个进程至少包含一条线程,主线程 ·可以将耗时的执行路径如网络请求放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时执行 还要解释一个概念:多任务调度系统 每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,

iOS多线程开发之离不开的GCD(上篇)

一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了?种新的方法来进?并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务,然后提交??作队列来并发的或者串?的执行.GCD是C实现,?NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分 并发任务会像NSOperationQueue那样基于系统负载来合适地并发进?,而串?行队列同一时间只执行单一