多线程原理

线程的定义

  • 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。
  • 进程要想执行任务,必须得有线程,进程至少要有一条线程。

 进程的定义

  • 进程是指在系统中正在运行的一个应用程序
  • 每个进程之间是独立的,每个进程均在其专用的且受保护的内存中运行。

进程与线程的区别

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间是独立的地址空间
  • 资源拥有:同一进程内的线程共享共享本进程的资源的,如 内存、I/O、cpu等,进程之间的资源地独立的。

多线程原理

  •  (单核CPU)同一时间,CPU只能处理一个线程,就是同一时间只有一个线程在执行
  • (多线程运行)CPU快速的在多个线程之间切换,CPU调度线程的时间足够快,造成了多线程“同时”执行的效果。
  •  如果线程非常多,CPU会在多个线程之间切换,小号大量的CPU资源,每个线程被调度的次数会降低,线程的执行效率降低

优点

  • 能适当提高程序的执行效率
  • 能适当提高的资源的利用率(CPU、内存)
  • 线程上的任务执行完毕后,线程会自动销毁

缺点

  • 开启线程需要占用一定的内存空间(默认情况每个线程512KB)
  • 如果开启大量的线程,会占用大量的内存空间,降低程序性能
  • 线程越多,CPU在调用线程上的开销就越大
  • 程序设计更加复杂,比如线程之间的通信、多线程的数据共享

多线程技术方案

 关于多线程的选型:常用的用该是 NSThread 、GCD、NSOperation 这三种,  GCD使用的最多,因为直接是block形式,使用简单。 NSOperation 易于控制 常用于多操作功能。

 

线程生命周期

线程的生命周期分为 新建、就绪、运行 、阻塞、死亡, 这么五种状态。下边聊一下它的这个五个阶段:

1.创建一个线程,start 线程进入就绪状态,即将开始运行

2.CPU调度线程开始运行,Running执行分为两种状态,阻塞死亡

      阻塞:

  1. 子线程执行会形成一系列 I/O流 堵塞,当堵塞执行完毕之后会执行Runnable,  此时它会有一个短暂停留期,如果超过这个短暂停留期,那么这条线程会被销毁。
  2. 如果这条线程正在销毁,此时CPU正好要调度,发现处于正在销毁中, 那么此时会开辟其他新线程 (线程2、线程3、线程4)等。
  3. 如果线程已经销毁,此时CPU正好去调度,也有可能优先调度此线程(重新创建一个相同的线程【内存地址相同】),这取决于CPU的处理(因为通过控制台可以看出有时候一直在使用同一个线程)

    死亡: 任务执行完毕或者执行了 exit、cancel 、等, 线程会走向死亡,

 

线程池调度原理

 

线程不安全

线程不安全主要讲的是资源抢夺。同步锁 @synchronized(资源)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值