郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助,欢迎给作者捐赠。支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送http://dwz.cn/Nret1

A.进程
什么是进程
进程是指在系统中正在运行的一个应用程序
每一个进程之间是独立的。每一个进程均运行在其专用且受保护的内存空间内
比方同一时候打开QQ、Xcode,系统就会分别启动2个进程
通过“活动监视器”能够查看Mac系统中所开启的进程
 
B.线程
主线程、子线程占用内存各自是1M和512K
1.什么是线程
1个进程要想运行任务。必须得有线程(每1个进程至少要有1条线程)
线程是进程的基本运行单元。一个进程(程序)的全部任务都在线程中运行
比方使用酷狗播放音乐、使用迅雷下载电影。都须要在线程中运行
 
2.线程的串行
1个线程中任务的运行是串行的
假设要在1个线程中运行多个任务。那么仅仅能一个一个地按顺序运行这些任务
也就是说,在同一时间内,1个线程仅仅能运行1个任务
比方在1个线程中下载3个文件(各自是文件A、文件B、文件C)
 
3.多线程
什么是多线程
1个进程中能够开启多条线程。每条线程能够并行(同一时候)运行不同的任务
进程  车间,线程  车间工人
多线程技术能够提高程序的运行效率
比方同一时候开启3条线程分别下载3个文件(各自是文件A、文件B、文件C)
 
4.多线程原理
多线程的原理
同一时间,CPU仅仅能处理1条线程。仅仅有1条线程在工作(运行)
多线程并发(同一时候)运行,事实上是CPU高速地在多条线程之间调度(切换)
假设CPU调度线程的时间足够快,就造成了多线程并发运行的假象
思考:假设线程很许多,会发生什么情况?
CPU会在N多线程之间调度。CPU会累死,消耗大量的CPU资源
每条线程被调度运行的频次会减少(线程的运行效率减少)
 
5.多线程的优缺点
多线程的长处
能适当提高程序的运行效率
能适当提高资源利用率(CPU、内存利用率)

多线程的缺点
开启线程须要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),假设开启大量的线程。会占用大量的内存空间,减少程序的性能
线程越多,CPU在调度线程上的开销就越大
程序设计更加复杂:比方线程之间的通信、多线程的数据共享

 
6.主线程
什么是主线程
一个iOS程序运行后。默认会开启1条线程。称为“主线程”或“UI线程”

主线程的主要作用
显示\刷新UI界面
处理UI事件(比方点击事件、滚动事件、拖拽事件等)

主线程的使用注意
别将比較耗时的操作放到主线程中

耗时操作会卡住主线程。严重影响UI的流畅度,给用户一种“卡”的坏体验
 
7.iOS多线程实现技术
  • pthread
  • NSThread
  • GCD
  • NSOperation
 
C.须要掌握的
多线程
1.NSThread
1> 开线程的几种方式
* 先创建,后启动
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];

* 直接启动
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(run) withObject:nil];

2> 其它使用方法
NSThread *current = [NSThread currentThread];
+ (NSThread *)mainThread; // 获得主线程

3> 线程间通信
performSelectorOnMainThread.....

2.GCD(重点)
1> 队列的类型
* 并发队列
获得全局的并发队列: dispatch_get_global_queue

* 串行队列
a.自己创建
dispatch_queue_create

b.主队列
dispatch_get_main_queue

2> 运行任务的方法类型
* 同步(sync)运行
* 异步(async)运行

3> 了解队列和方法的配合使用

4> 线程间通信
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   // 运行耗时的异步操作...
   dispatch_async(dispatch_get_main_queue(), ^{
       // 回到主线程。运行UI刷新操作
   });
});

5> 其它使用方法
dispatch_once
dispatch_after
dispatch_group_async\dispatch_group_notify

3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation

2> NSOperationQueue(重点)
* 最大并发数设置

- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
 
注意:此方法仅能限制同一时候运行的线程数。不能限制特定的线程(就可以能每次运行的线程组都是不一样的)
 
 
* 设置依赖
[operationB addDependency:operationA]; // 操作B依赖于操作A

3> 自己定义Operation(了解基本流程)

4> 怎样解决一张图片(一个url)反复下载的问题

郝萌主倾心贡献,尊重作者的劳动成果。请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送

游戏官方下载:http://dwz.cn/RwTjl

游戏视频预览:http://dwz.cn/RzHHd

游戏开发博客:http://dwz.cn/RzJzI

游戏源代码传送http://dwz.cn/Nret1

iOS多线程与网络开发之多线程概述的更多相关文章

  1. iOS多线程与网络开发之多线程NSThread

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  2. iOS多线程与网络开发之多线程GCD

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  3. iOS多线程与网络开发之发送接收server信息

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. (1).使用同步方法发送get请求(不经常使用) 2 /** 发送get消息 */ 3 - (void) testGet { 4 NSString *r ...

  4. iOS多线程与网络开发之解析json数据

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...

  5. iOS多线程与网络开发之小文件上传

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. /** 取得本地文件的MIMEType */ 2 - (void) getMIMEType { 3 // Socket 实现断点上传 4 5 //apa ...

  6. iOS开发——实战篇Swift篇&UItableView结合网络请求,多线程,数据解析,MVC实战

    UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高 ...

  7. iOS开发之多线程技术

    本篇争取一篇讲清讲透,依然将通过四大方面清晰的对iOS开发中多线程的用法进行详尽的讲解: 一.什么是多线程 1)多线程执行原理 2)线程与进程 3)多线程的优缺点 二.我们为什么要用多线程编程技术 三 ...

  8. IOS网络开发概述

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  9. ios开发之多线程---GCD

    一:基本概念 1:进程:正在运行的程序为进程. 2:线程:每个进程要想执行任务必须得有线程,进程中任务的执行都是在线程中. 3:线程的串行:一条线程里任务的执行都是串行的,假如有一个进程开辟了一条线程 ...

随机推荐

  1. Idea下maven的配置和使用

    maven的主要功能就是依赖管理,jar包仓库.和C#中的NuGet仓库差不多.另外也提供打包构建,启动插件等功能.下面主要讲一下,在使用Idea开发时,maven的配置和使用. maven的安装和配 ...

  2. pat 甲级 1038. Recover the Smallest Number (30)

    1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  3. request库

    0x00  环境简介和安装 我这里使用的是python2.7版本,直接使用pycharm2018这款IDE. 首先在pycharm中配置一下virtualenv环境,virtualenv是一个创建独立 ...

  4. duilib入门简明教程 -- 响应按钮事件(4) (转)

    原文转自 http://www.cnblogs.com/Alberl/p/3343610.html     上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = ...

  5. linux内核之情景分析mmap操作

    进程可以通过mmap把一个已打开文件映射到用户空间. mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset) sta ...

  6. 一个.java文件定义多个类的情况

    一个.java文件中定义多个类: 注意一下几点: (1) public权限类只能有一个(也可以一个都没有,但最多只有一个): (2)这个.java文件名只能是public 权限的类的类名: (3)倘若 ...

  7. 【转】重装Ubuntu时如何保留/home分区中的数据

    Windows系统可以在重装时只格式化C盘,从而保留其他分区的数据. Ubuntu系统也可以,只要在安装系统时分出一个/home分区.你可以把Ubuntu的“/”分区看为Windows的C盘,重装Ub ...

  8. Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法(修订)

    Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及字体配置工具 fontconfig 采用的是未经优化的编译及设置,字体渲染效果比较差.而某些 Linux 发行版的桌面字体 ...

  9. NYOJ 20.吝啬的国度-DFS+STL(vector保存上一节点)

    整理代码 吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第 ...

  10. 2016集训测试赛(十九)Problem C: 无聊的字符串

    Solution 傻X题 我的方法是建立后缀后缀树, 然后在DFS序列上直接二分即可. 关键在于如何得到后缀树上每个字符对应的字节点: 我们要在后缀自动机上记录每个点在后缀树上对应的字母. 考虑如何实 ...