多线程编程的基础知识

来源:互联网 发布:阿里云数据盘克隆 编辑:程序博客网 时间:2024/05/01 21:16

一、进程

1.程序:由源代码生成的可执行应用。(如:QQ.app)

2.进程:一个正在运行的程序可以看做一个进程。(正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源。

3.线程:程序中独立运行的代码段。(如:接收QQ消息的代码块)

一个进程是由一个和多个线程组成,进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。

二、单线程

1、每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程。

2、主线程在程序启动时被创建,用于执行main函数。

3、只有一个主线程的程序,称作单线程程序。

4、主线程负责执行程序所有的代码(UI展现以及刷新,网络请求,本地请求)。这些代码只能顺序执行,无法并发执行。

注意:UI展现和刷新只能写在主线程中。

三、多线程

1、拥有多个线程的程序,称作多线程程序。

2、iOS允许用户自己开辟新的线程,相对于主线程来说,这些线程,称作子线程。

3、子线程和主线程都是独立运行的单元,各自的执行互不影响,因此能够并发执行。


补充的多线程的基本知识

4、iOS默认给主线程分配1M的栈空间,默认给子线程分配512K的栈空间。(分配的字节数必须是4K的整数倍)

5、分配的空间用来存放线程中为变量开辟的空间,一般情况下足够使用。

6、与栈空间的使用方式不同,主线程和子线程共用同一块内存空间。

7、程序入口处默认设置了自动释放池,由主线程负责执行代码。子线程新开辟的内存不在主线程管辖范围内(线程之间互不干扰,相互独立),所以子线程为对象开辟的空间不会自动释放,要手动为子线程添加自动释放池。

8、短时间内使用静态方法开辟大量内存空间或使用循环使用便利构造器,会造成内存瞬间集聚,程序carsh掉,所以要写@autorelease pool。


9、多线程的种类

脱离线程:线程结束后被销毁,子线程可能是脱离线程。

非脱离线程:线程结束后被挂起,等待唤醒,不销毁。主线程一定是非脱离线程。


10、iOS中实现多线程的方法

a、NSObject

b、NSThread

c、NSOperation和NSOperationQueue结合使用

d、GCD(最重要的)



四、单、多线程的区别

单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)

多线程程序:有多个线程,线程之间独立运行,能有效的避免代码阻塞,并且提高程序的运行性能。

0 0