GCD 学习笔记

iOS中三种多线程编程技术

  • NSThread
    优点:NSThread 比其他两个轻量级
    缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
  • NSOperation
    优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
  • GCD
    是 Apple 开发的一个多核编程的解决方法,简单易用,效率高,速度快。通过 GCD,开发者只需要向队列中添加一段代码块(block或C函数指针),而不需要直接和线程打交道。GCD在后端管理着一个线程池,它不仅决定着你的代码块将在哪个线程被执行,还根据可用的系统资源对这些线程进行管理。这样通过GCD来管理线程,从而解决线程被创建的问题。

基本概念

  • 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,在iOS系统中,开启一个应用就打开了一个进程。

  • 线程:线程(Thread)是进程中的一个实体,程序执行的基本单元。在iOS系统中,一个进程包含一个主线程,它的主要任务是处理UI事件,显示和刷新UI。

  • 任务:执行的操作(Block里的代码)

  • 队列:存放任务的结构。

  • RunLoop:每条线程都有唯一的与之对应的RunLoop对象,RunLoop在第一次获取时创建,在线程结束时销毁。(这就相当于 线程是一个类,RunLoop是类里的实例变量,这样便于理解)

  • 同步:在当前线程依次执行,不开启新的线程。

  • 异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B。任务B不用等待任务A结束才执行。存在多条线程。

  • 串行:线程执行只能依次逐一先后有序的执行。

  • 并发:指两个或多个事件在同一时间间隔内发生。可以在某条线程和其他线程之间反复多次进行上下文切换,看上去就好像一个CPU能够并且执行多个线程一样。其实是伪异步。

  • 并行:指两个或多个事件在同一时刻发生。多核CUP同时开启多条线程供多个任务同时执行,互不干扰。

  • 对于网络编程而言,线程是魔鬼。如果在网络编程中使用线程,就很可能产生大量使用线程对倾向,会引发很多问题。例如每个连接都使用线程,很快就会用尽线程栈内存。因为Cocoa框架提供了用于异步网络通信的API,所以在网络编程中不可使用线程。务必使用用于异步网络通信的API

你可能感兴趣的:(GCD 学习笔记)