线程和进程的区别
线程:
- 1,线程是进程的基本单位,一个进程的所有任务都在线程中执行。
- 2,进程要想执行任务,必须得有线程,进程至少要有一条线程。
- 3,程序启动会默认开启一条线程,这条线程被称为主线程或UI线程。
进程:
- 1,进程是指在系统中正在运行的一个应用程序。
- 2,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内。
进程与线程的关系
地址空间
:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有
:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但进程之间的资源是独立的。
- 1,一个
进程崩溃
后,在保护模式下,不会对其他进程产生影响
,但是一个线程崩溃
整个进程都死掉,所有多进程要比多线程健壮
。 - 2,
进程切换
时,消耗的资源大,效率高,所以涉及到频繁的切换时,使用线程要好于进程。 - 3,
执行过程
:每个独立的进程
有一个程序运行的入口
,顺序执行序列
和程序入口
。但是线程不能独立执行
,必须依存在应用程序中,由应用程序提供多个线程执行控制
。 - 4,线程是
处理器调度
的基本单位,但是进程不是。 - 5,线程没有地址空间,线程包含在进程地址空间中。
多线程是多个线程同时在进行么?
时间片
时间片
:CPU在多个任务直接进行快速的切换,这个时间间隔就是时间片。
- 1,对于
单核CPU
,同一时间,CPU只能处理一个进程。多线程是CPU快速的在多个线程之间的切换。 - 2,对于
多核CPU
,具备多个线程同时执行的条件。
线程的生命周期
线程的生命周期可分为New、Runnable、Running、Blocked、Dead
这5种状态。

- 1,新建线程,线程进入
新建
状态。 - 2,当线程
start
,线程进入就绪(Runable)
状态。 - 3,当CPU调度当前线程,线程进入
运行(Running)
状态。 - 4,当CPU调度其他线程,线程进入
就绪(Runable)
状态。 - 5,线程调用
sleep
等待同步锁
,从可调度线程池移出
,线程进入阻塞(Blocked)
状态。 - 6,
sleep
结束时,获得同步锁
,重新添加到可调度线程池
中。 - 7,线程运行结束,则会销毁,死亡(Dead)。
线程的优先级越高,执行越快么?
不是的,执行速度取决于资源的大小(任务的复杂度)和CPU的调度
。
端口通信
在iOS中,使用NSPort
进行通信,对象须遵守NSMachPortDelegate
协议,另外,需要将 两个通信对象的端口加到当前线程
的runloop
中。
网友评论