美文网首页
iOS 理解多线程

iOS 理解多线程

作者: 随心_追梦 | 来源:发表于2018-11-06 15:56 被阅读0次

    前言

    由于一条线程同时只能处理一条任务,所以一个线程里面的任务只能顺序执行。如果遇到耗时的操作,需要等待上一个任务完成之后再执行下一个任务。这是很不好的用户体验。在iOS中,通过将耗时的操作放到一个子线程里面,而把用户交互的操作放到主线程里面,保证应用及时响应用户的操作,提供用户的体验。这就是多线程技术。

    多线程是指从软件或者是硬件上实现多个线程并发执行的技术

    进程

    先要学好多线程,我们必须首先了解什么是进程、什么是线程,以及他们之间的区别是什么!
    进程是指程序正在运行的独立单元,也可以理解为一个正在运行的程序就是一个进程。每个进程拥有自己独立的地址空间。进程作为系统进行分配和调度的一个独立的单位,主要有一下几个特征:

    • 独立性:进程是一个独立运行的基本单位,它拥有自己独立的资源,又拥有自己私有的地址空间。在没有经过进程允许的情况下,一个进程不可以访问其他进程的地址空间。
    • 动态性:进程的实质是程序在系统中的一次执行过程,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。进程有时间的概念,他拥有自己的生命周期和不同的活动状态,是动态消亡的。
    • 并发性: 多个进程可以在处理器中同时执行。不会互相影响(同时执行并非真正意义上的并发执行,它只是CPU在多个进程之间来回切换,造成程序同时执行的假象)。
    线程

    线程是进程的基本执行单位,一个进程必定有一个主线程(进程就像是操场,线程就像是操场上一条条的跑道)。
    由于创建一个进程的时候,系统必须为进程分配独立的内存空间,并且需要分配大量的相关资源。但是创建一个线程就简单许多。所以使用多线程实现并发比多进程性能要高很多。多线程编程主要有一下几大优势:

    • 进程间不能共享内存,但是线程之间内存共享很容易
    • 当硬件处理器的数量有所增加时,程序运行的速度更快
    • 可以充分发挥多核处理器的优势,将不同的任务分配给不同的处理器,真正进入并行时代。
    • 耗时之类的操作放到子线程,主线程负责用户交互。提高用户体验。
    多线程开发的劣势

    虽然多线程开发能提高程序的运行效率,提供用户体验。让一个程序更加的健壮。但是凡事有利有弊,多线程开发也需要注意下面几个问题:

    • 开启线程需要占用一定的内存空间(默认情况下,主线程最大占用1M的栈区空间,子线程最大占用512K的栈区空间),所以线程开启过多,内存消耗过大,从而会降低程序的性能。
    • 开启的线程越多,CPU在调度线程上的开销就会越大,一般最好不用同时开启5个线程
    • 程序的设计会变得更加复杂,如线程之间的通信,多线程之间的数据共享等
    线程的并行和串行

    如果一个进程中只有一个线程,而这个进程要执行多个任务,那么这些任务只能一个一个按顺序的执行。也就是说,在同一个时间内,只能执行一个任务,这样的线程执行方式成为串行。
    如果一个进程包含不只一个线程,每条线程之间可以并行执行不同的任务,则称之为线程的并行。

    多线程的实现方式

    iOS一共有四种多线程的实现方式,它们各有侧重,具体区分如下:

    多线程实现方式 简介 语言 线程生命周期 使用频率
    pthread 一套通用的多线程API,跨平台可移植,使用难度大 C 程序员管理 几乎不用
    NSThread 使用更加面向对象,可以直接操作线程对象 OC 程序员管理 偶尔使用
    GCD 旨在替代NSThread技术,使用简单,充分利用设备的多核优势 C 自动管理 经常使用
    NSOperation 基于GCD,比GCD多了一些更加简单实用的功能,实用更加面向对象 OC 自动管理 经常使用

    相关文章

      网友评论

          本文标题:iOS 理解多线程

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