多线程(一)

一.线程和进程

进程::系统中正在运行的一个程序,每个程序独立运行在自己特定的受保护的内存空间内。

从活动监视器上可以很直观的看到正在运行的进程名称,和占得CPU百分比。

线程:一个进程想要执行任务,必须有线程,每一个进程最少有一条线程。线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。

可以看出有3个线程

二.线程的串行和并行

串行:在一个线程中执行多个任务,会按照顺序一个一个去执行。在同一时间内,只会执行一个任务。

并行:在一个线程执行多个任务时,会同时执行多个不同的任务。

多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在执行。多线程执行,是CPU快速的在多线程之间调度。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

三.多线程的优缺点

优点:能够适当提高程序的执行效率,能适当的提高资源利用率(CPU,内存利用率)

缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果大量开启线程,会占用大量内存空间,降低程序的性能线程越多,CPU在调度线程的开销就越大.程序设计会更加复杂,比如线程之间的通讯,多线程的数据共享。

四:多线程开发中的运用

在程序运行后会默认开启一条线程,称为主线程或UI线程,主要负责UI的刷新,处理UI事件.

而在子线程负责数据的加载处理。

主线程使用注意:耗时操作别放到主线程中,耗时操作会严重影响UI的流畅度,给用户一种“卡”的体验.

五.代码示例:

我们在storyboard中拖入开关控件,或者滑动条控件.

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

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

}

- (void)longOperation{

NSLog(@"start");

for (int i = 0; i < 1000000; ++i) {

NSLog(@"%d",i);

}

NSLog(@"end");

}

如果在主线程中调用longOperation方法,由于在方法中我们打印i的值.这个操作是耗时操作.会大量消耗CPU性能.当运行程序,我们点击storyboard中的控件时,会发现控件没有进行响应,给用户“卡”的体验.而当我们开启子线程,将longOperation放入子线程中,再点击控件时,控件进行响应动作.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 1,019评论 1 7
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,204评论 25 708
  • 首先了解单线程:一、单线程的应用,整个应用中只有一个顺序执行流,当执行流在执行某个耗时的操作,或者不能立即完成的任...
    茉上心弦阅读 589评论 1 8
  • 以前, 我想跟你上床, 你也想跟我上床, 我们都知道对方想跟自己上床, 却不知道什么时候可以上床, 我想那是我们最...
    刘欢已被占用阅读 838评论 0 1
  • 说实话,我这十八年来没什么事真正坚持下来。叫嚣着跑步,可能五天之后就不见了身影。画画也在七年之后放弃了。跆...
    _晨曦_阅读 337评论 4 1