当前位置: 首页 > 编程笔记 >

iOS多线程介绍

谭献
2023-03-14
本文向大家介绍iOS多线程介绍,包括了iOS多线程介绍的使用技巧和注意事项,需要的朋友参考一下

一、前言部分

最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解。

1、什么是进程?

1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序。

2).每个线程之间是独立存在的,分别运行在其专用的且受保护的内存空间中。

3).比如打开QQ或Xcode系统会分别开启两个进程 如图:

4)、我们可以通过"活动监视器"查看Mac系统中所开启的进程。

2、什么是线程?

1).一个进程要想执行任务必须得有线程,即一个进程至少要有一个线程。

2).线程是进程的基本执行单元,一个进程(程序)的所有任务都是在线程中执行的。

3).比如使用酷狗播放音乐、使用迅雷下载电影都需要在线程中运行 如图:

3、什么是线程的串行?

1).一个线程中任务是串行执行的(顺序执行)的,也就是说一个线程同一时间内只能执行一个任务。

2).串行执行图解,比如一个线程下载3个文件(文件A、B、C)

4、什么是多线程

1).一个进程中可以开启多个线程,每个线程可以并发(同时)执行不同的任务。

2).类似关系列举:进程---->车间;线程---->车间工人

3).多线程图解,比如同时开启3个线程分别下载3个文件(文件A、B、C)

5、多线程原理

1).同一时间CPU只能执行一个线程,只有一个线程在工作(执行)。

2).多线程并发(同时)执行,其实是CPU快速的在多个线程之间调度(切换)。

3).如果CPU调度线程的速度够快,就会造成多线程并发执行的假象。

4).多线程的缺点:

1、每个线程都会占用一定的内存空间(默认情况下:主线程占用1MB,子线程占用512KB),

如果开启线程过多会占用大量的内存空间因而造成程序性能降低。

2、线程越多CPU调度线程上的开销就越大(类似工厂工人越多,工厂开销也越大)。

3、使程序设计更复杂:比如多线程的数据通信,多线程之间的数据共享。

5).多线程的优点:

1、能适当提高程序的执行效率。

2、能适当提高资源利用率(CPU、内存的利用率)

6、什么是主线程?

1).一个iOS程序开启后默认会开启一个线程,这个线程被称为"主线程"或"UI线程"。

2).主线程的主要作用:

1、显示/刷新UI界面

2、处理UI事件(比如点击事件、滚动事件、拖拽事件等)

3).主线程注意点:

1、别将耗时的操作放在主线程中,耗时操作放在主线程中会造成程序卡顿的问题。

7、耗时操作Demo演示

1)、直接在主线程中运行的Demo

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//获取当前执行方法和当前线程
//number== 主线程
//number!= 其他线程、子线程、次线程
NSLog(@"%s----%@",__func__,[NSThread currentThread]);
//直接在主线程中运行 造成UI操作卡顿
[self longTimeOperation];
}
#pragma mark-耗时操作
-(void)longTimeOperation{
for (int i=; i<; i++) {
NSLog(@"%d",i);
}
}

2)、在子线程中运行的Demo

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//获取当前执行方法和当前线程
//number== 主线程
//number!= 其他线程、子线程、次线程
NSLog(@"%s----%@",__func__,[NSThread currentThread]);
//将耗时操作放在子线程中执行,不影响UI的操作
[self performSelectorInBackground:@selector(longTimeOperation) withObject:nil];
}
#pragma mark-耗时操作
-(void)longTimeOperation{
for (int i=; i<; i++) {
NSLog(@"%d",i);
}
}

以上内容是小编给大家介绍的ios多线程知识,希望对大家有所帮助!

 类似资料:
  • 多线程编程Demo,包括 GCD 的使用,block 的使用,NSThread 的使用,异步下载,同步下载等。 [Code4App.com]

  • 本文向大家介绍IOS多线程开发之线程的状态,包括了IOS多线程开发之线程的状态的使用技巧和注意事项,需要的朋友参考一下 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行。改变这种状况可以从两个角度出发:对于单核处理器,可以将多个

  • Rust 通过 spawn 函数提供了创建本地操作系统(native OS)线程的机制,该函数的参数是一个转移闭包(moving closure)。 use std::thread; static NTHREADS: i32 = 10; // 这是主(`main`)线程 fn main() { // 提供一个 vector 来存放所创建的子线程(children)。 let mut

  • 本文向大家介绍iOS多线程开发——NSThread浅析,包括了iOS多线程开发——NSThread浅析的使用技巧和注意事项,需要的朋友参考一下   在iOS开发中,多线程的实现方式主要有三种,NSThread、NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,为了学习的完整性,今天我们主要从代码层面来实现NSThread的使用。案例代码上传至 http

  • 本文向大家介绍java中多线程的超详细介绍,包括了java中多线程的超详细介绍的使用技巧和注意事项,需要的朋友参考一下 1、线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。 2、线程与进程 进程概述: 几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一

  • 本文向大家介绍python threading模块操作多线程介绍,包括了python threading模块操作多线程介绍的使用技巧和注意事项,需要的朋友参考一下 python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的模块,threading是对thread做了一些包装的,可以更加方便的被使用。这里需要提一下的是