美文网首页threadios多线程
iOS与多线程(八) —— 多线程技术概览与总结(一)

iOS与多线程(八) —— 多线程技术概览与总结(一)

作者: 刀客传奇 | 来源:发表于2019-06-24 12:47 被阅读0次

    版本记录

    版本号 时间
    V1.0 2019.06.24 星期一

    前言

    信号量机制是多线程通信中的比较重要的一部分,对于NSOperation可以设置并发数,但是对于GCD就不能设置并发数了,那么就只能靠信号量机制了。接下来这几篇就会详细的说一下并发机制。感兴趣的可以看这几篇文章。
    1. iOS与多线程(一) —— GCD中的信号量及几个重要函数
    2. iOS与多线程(二) —— NSOperation实现多并发之创建任务
    3. iOS与多线程(三) —— NSOperation实现多并发之创建队列和开启线程
    4. iOS与多线程(四) —— NSOperation的串并行和操作依赖
    5. iOS与多线程(五) —— GCD之一个简单应用示例(一)
    6. iOS与多线程(六) —— GCD之一个简单应用示例(二)
    7. iOS与多线程(七) —— GCD之一个简单应用示例源码(三)

    线程和进程

    1. 进程

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

    2. 线程

    1个进程要想执行任务,必须得有线程,每1个进程至少要有1条线程,称为主线程。一个进程(程序)的所有任务都在线程中执行。

    也可以这么理解:线程是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

    一个程序至少一个进程,一个进程至少一个线程。

    线程的串行:1个线程中任务的执行是串行的。如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。也就是说,在同一时间内,1个线程只能执行1个任务。

    3. 线程和进程的区别

    • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
    • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、CPU等,但是进程之间的资源是独立的。一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
    • 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    • 线程是CPU调用(执行任务)的最小单位,但是进程不是。
    • 进程是CPU分配资源的最小单位,一个进程中至少要有一个线程。
    • 两者均可并发执行。

    4. 优缺点

    线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。

    进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。

    何时使用多进程,何时使用多线程?

    • 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
    • 要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

    多线程

    1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务,多线程技术可以提高程序的执行效率。

    1. 原理

    同一时间,CPU只能处理1条线程,只有1条线程在工作(执行),多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

    那么如果线程非常非常多,会发生什么情况?

    CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源,同时每条线程被调度执行的频次也会会降低(线程的执行效率降低)。

    2. 优缺点

    优点

    • 能适当提高程序的执行效率
    • 能适当提高资源利用率(CPU、内存利用率)

    缺点

    • 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用-setStackSize:设置,但必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间。
    • 如果开启大量的线程,会降低程序的性能,线程越多,CPU在调度线程上的开销就越大。
    • 程序设计更加复杂:比如线程之间的通信、多线程的数据共享等问题。

    总结图表

    首先看一下总结的一个图表,来自于这里,盗的图,感觉这个总结的很好。

    所以我也引用收藏下,方便学习和查看。


    实现方案

    下面看下多线程的实现方案

    后记

    本篇主要讲述了多线程概览和总结,感兴趣的给个赞或者关注~~~

    相关文章

      网友评论

        本文标题:iOS与多线程(八) —— 多线程技术概览与总结(一)

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