美文网首页
iOS 底层 - 多线程的基本概念

iOS 底层 - 多线程的基本概念

作者: 水中的蓝天 | 来源:发表于2020-04-06 17:40 被阅读0次

本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢 !

首先对一些基本的概念做一些了解!

什么是进程?

  • 一个正在运行的程序可以看做一个进程。
  • Process 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

iOS进程生命周期

什么是线程 ?

  • 线程是进程中的实际执行单元,进程中的任务执行依赖线程来实现。
  • thread 是操作系统能够进行运算调度的最小单位。被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的生命周期@2x.png

线程各个状态下线程所处的位置:
新建状态:在内存中,但不在可调度池
就绪状态:在可调度池中,可以执行任务
运行状态:在可调度池中,正在执行任务
阻塞状态:被移出可调度池,在内存中,不能执行任务
死亡状态:被释放

什么是主线程?

当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread),因为它是程序开始时就执行的。主线程是负责执行main函数的线程;主线程中几乎所有的事情都是交给runloop去做,比如UI界面刷新、点击事件的处理、performSelector等需要Runloop,但是像简单的普通代码:NSLog输出、变量定义等是不需要Runloop参与的;

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

什么是多线程 ?

  • multithreading , 是指从软件或者硬件上实现多个线程并发执行的技术。
  • 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。
  • 多线程的调度原理可以认为是:时间片轮转调度算法,每个线程都会分配一个时间片然后大家轮着做任务,多线程执行时会快速切换时间片来完成多线程任务的执行;其实操作系统对进程、线程都是按照这种调度逻辑实现的。

IOS中常见的多线程方案

多线程方案@2x.png
  • mach pthread: 极少用来开启多线程,但在高精度的定时会用到 mach_wait_until()
  • pthread: 一套通用跨平台API,开发中几乎不怎么使用开启多线程 ;但线程同步技术中会用到pthread_mutex、读写安全方案会用到pthread_rwlock;
  • NSThread: 是对pthread的OC封装, 是一个OC对象,简单易用,可直接操作线程对象。
  • GCD: 旨在替代NSThread等多线程技术,充分利用设备的多核效率高,且可以保证线程安全。是一套C语言的API
  • NSOperation: 基于GCD的OC封装,比GCD多了些实用功能,比如:添加依赖

相关文章

  • iOS原理(八)----多线程

    iOS原理(八)----多线程 基本概念 iOS常见的多线程方案有以下四种: pthread:是一套通用的多线程C...

  • iOS多线程之NSThread

    前面总结了多线程基本概念和iOS多线程PThread的使用,下面接着总结iOS多线程的另外一种实现方案NSThre...

  • iOS 底层 - 多线程的基本概念

    本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗...

  • iOS开发多线程那些事儿

    iOS中的多线程 iOS中多线程实现的多种技术方案: 多线程的两组基本概念 串行(Serial):在固定时间内只能...

  • 多线程-GCD

    01基本概念 iOS的多线程方案有哪几种?你更倾向于哪一种? 他们底层其实都是依赖于pthread,更倾向于GCD...

  • 2022年iOS面试题2

    重点总结-四大分类: iOS底层原理性能优化以及架构多线程、网络数据结构算法iOS底层原理(必问):iOS开发必备...

  • iOS 多线程

    前言:这可能是史上最全面的一篇iOS 多线程博客了(王婆卖瓜一番?),从多线程的基本概念,进程的概念,引出iOS中...

  • Java基础16:Java多线程基础最全总结

    本文介绍了Java多线程的基本概念,使用方法,以及底层实现原理。帮助你更好地使用Java的多线程。 具体代码在我的...

  • swift3.0 GCD 笔记

    iOS 下的多线程编程技术从底层往上分别是 NSThread、NSOperation、Grand Central ...

  • Java入门系列09 -- 多线程,I/O

    进程,线程,多线程的相关概念这里就不做阐述,可参考 iOS底层系列22 -- 多线程基础概念[https://ww...

网友评论

      本文标题:iOS 底层 - 多线程的基本概念

      本文链接:https://www.haomeiwen.com/subject/irjbphtx.html