进程和线程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。
线程的划分尺度小于进程,这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。使用多线程的编程通常能够带来更好的性能和用户体验,但是多线程的程序对于其他程序是不友好的,因为它可能占用了更多的CPU资源。当然,也不是线程越多,程序的性能就越好,因为线程之间的调度和切换也会浪费CPU时间。
串行和并行
当一个线程执行多个任务,会采用执行完一个再执行下一个的方式,这种执行任务的方式称为串行;多个线程分担多个任务,不同的任务同时执行,这种执行任务的方式称为并发。
同步和异步
同步是指当前一个任务未能完成时,后一个任务被阻塞;异步可以理解为不同的任务在不同的线程中执行,当开辟的子线程(工作线程)发生阻塞,主线程或其他线程不会受到影响。
说明:异步和并发的概念不完全相同,异步强调解决主线程阻塞的问题,而并发一般指子线程(工作线程)之间的关系,多个工作线程分担任务称为并发执行任务。
多线程的实现方式
iOS开发中实现多线程的方式很多,包括:
- POSIX线程:简称Pthreads,是线程的POSIX标准,该标准定义了创建和操作线程的一套API,是由C语言实现的,例如pthread_create()函数可以创建线程,pthread_exit()函数可以终止当前线程,pthread_mutex_init()函数可以初始化互斥锁等等,使用这种方式操作线程需要扎实的C编程功底以及对系统底层工作机制的认识。
- NSThread类:线程,此种方式是轻量级的线程机制,但需要自行管理线程的生命周期,线程同步等问题,同步锁会产生系统开销。
- NSOperationQueue类:执行队列,优点是不需要关心线程管理,数据同步的事情,可以把精力放在线程需要执行的操作上。
- GCD:Grand Central Dispatch,是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6,iOS 4及以上也可以使用,该技术是取代上述技术的技术。