Quantcast
Viewing all articles
Browse latest Browse all 5930

IOS 中的多线程网络(一)

1. 基本概念

1.1 进程

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

1.2 线程

(1)基本概念
 一个进程要想执行任务,必须得有线程(每一个进程至少要有1条线程),线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。

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

1.3 多线程

(1)基本概念
 即1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。

(2)线程的并行
 并行即同时执行。比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C。

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

(4)多线程优缺点

  优点:
  (1)能适当提高程序的执行效率。
  (2)能适当提高资源利用率(CPU、内存利用率)。
  缺点:
  (1)开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
  (2)线程越多,CPU在调度线程上的开销就越大。
  (3)程序设计更加复杂:比如线程之间的通信、多线程的数据共享。

1.4 多线程在iOS开发中的应用

  1.4.1 主线程
  (1)一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”。
  (2)作用。刷新显示UI,处理UI事件。

  1.4.2 使用注意
  (1)不要将耗时操作放到主线程中去处理,会卡住线程。

1.5 IOS中多线程的实现方案

Image may be NSFW.
Clik here to view.
这里写图片描述

2. pthread

pthread 的使用需要包含头文件。
Image may be NSFW.
Clik here to view.
这里写图片描述

3. NSThread

NSThread 创建线程的三种方法:

(1)创建、启动线程

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
// 线程一启动,就会在线程thread中执行self的run方法

主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程

+ 获得当前线程
NSThread *current = [NSThread currentThread];

线程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;

(2)创建线程后自动启动线程

[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

(3)隐式创建并启动线程

[self performSelectorInBackground:@selector(run) withObject:nil];

后两种创建线程的方式的优缺点:

优点:简单快捷。
缺点:无法对线程进行更详细的设置。

作者:huangfei711 发表于2017/2/26 15:27:42 原文链接
阅读:141 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>