多线程和网络
2014-06-08 14:10
134 查看
多线程和网络
知识点
一般应用程序都是一个进程.
一个进程下面可以有多个线程,进程可以看做一个容器,里面放置了好多的线程.线程相当于一个路径,多线程相当于多个路径,一个线程就是函数调用,首先调用main函数
主线程 线程1
主线程和线程1是并行的,是同步的.
即便发生线程1赌赛了,也不会影响主线程的执行.注意多核的cpu是同时运行的,单核的不是,单核是把cpu分成好多个时间片,第一秒执行主线程,第二秒执行线程1等
开启的线程就是在mutableThread这个函数上运行.
调用类方法
这个是调用NSObject的方法,也是可以开启线程的
第二种调用线程方式
第三种调用方式
[self ww:nil];
当线程调用方法完成后就会结束线程.
第四种
这种方式可以使用block语法.如果使用block可以访问main函数里的变量,如果是方法就不可以了.
NSOperationQueue是一个线程池子,里面可以放好多个线程,addOperation可以多次使用,从而添加多个线程,可以使多个线程并发使用.
也可以更改线程2的优先级别.
有的时候我们还需要从多线程跳回到主线程上面去,比如我们在函数中请求网络数据,当网络数据请求完毕后,我们需要刷新页面,这个时候需要调回到主线程,切记ui的操作都是在主线程上完成的,不要放到多线程上去.
如果我们创建多线程我们可以使用这种方式因为这种方式的性能比较好.特别是在多核的状态下.
开启多线程一定要加入自动释放池.
思考题
NSRunLoop的基本概念
我们的main函数到return就会结束程序就退出了,我们可以使用NSRunLoop来循环主函数不让它退出.
我们创建的UIApplication项目已启动就已经创建好了NSRunLoop,只是我们看不到.
在多线程上使用时间定时器一定要开启NSRunLoop主线程上不用的.
面试题:定时器在主线程上运行,每秒调用一个函数一次,但是这样精确吗?
答案是不精确,因为主线程做的事情很多难免有阻塞现象,若阻塞0.5秒,定时器就会延迟0.5秒,如果要解决这个办法就要在多线程上面去运行这个时间定时器.
必须加上NSRunLoop防止代码结束.
NSRunLoop的作用其实就是让定时器一直处于活动状态.
HTTP协议的基本概念
除了聊天程序外使用scoket,其它的都会用到HTTP协议.scoket是一个长连接状态,这样才可以实时通讯.HTTP服务器没有办法想你发送数据,只有你请求的时候才可以的.
客户端发出请求,然后服务器端根据你的请求响应你
比如打开网站就是get请求,索取网址
请求
Accept:请求的数据类型是文本或者是xml
Accept-Charset:编码方式
Accept-Encoding:是否有压缩.
Accept-Language:内容的语言.
响应
网络请求方式
我们day_02加载图片在主线程上就是同步请求.
访问网络的基本流程
知识点
一般应用程序都是一个进程.
一个进程下面可以有多个线程,进程可以看做一个容器,里面放置了好多的线程.线程相当于一个路径,多线程相当于多个路径,一个线程就是函数调用,首先调用main函数
主线程 线程1
主线程和线程1是并行的,是同步的.
即便发生线程1赌赛了,也不会影响主线程的执行.注意多核的cpu是同时运行的,单核的不是,单核是把cpu分成好多个时间片,第一秒执行主线程,第二秒执行线程1等
开启的线程就是在mutableThread这个函数上运行.
调用类方法
这个是调用NSObject的方法,也是可以开启线程的
第二种调用线程方式
第三种调用方式
[self ww:nil];
当线程调用方法完成后就会结束线程.
第四种
这种方式可以使用block语法.如果使用block可以访问main函数里的变量,如果是方法就不可以了.
NSOperationQueue是一个线程池子,里面可以放好多个线程,addOperation可以多次使用,从而添加多个线程,可以使多个线程并发使用.
也可以更改线程2的优先级别.
有的时候我们还需要从多线程跳回到主线程上面去,比如我们在函数中请求网络数据,当网络数据请求完毕后,我们需要刷新页面,这个时候需要调回到主线程,切记ui的操作都是在主线程上完成的,不要放到多线程上去.
如果我们创建多线程我们可以使用这种方式因为这种方式的性能比较好.特别是在多核的状态下.
开启多线程一定要加入自动释放池.
思考题
NSRunLoop的基本概念
我们的main函数到return就会结束程序就退出了,我们可以使用NSRunLoop来循环主函数不让它退出.
我们创建的UIApplication项目已启动就已经创建好了NSRunLoop,只是我们看不到.
在多线程上使用时间定时器一定要开启NSRunLoop主线程上不用的.
面试题:定时器在主线程上运行,每秒调用一个函数一次,但是这样精确吗?
答案是不精确,因为主线程做的事情很多难免有阻塞现象,若阻塞0.5秒,定时器就会延迟0.5秒,如果要解决这个办法就要在多线程上面去运行这个时间定时器.
必须加上NSRunLoop防止代码结束.
NSRunLoop的作用其实就是让定时器一直处于活动状态.
HTTP协议的基本概念
除了聊天程序外使用scoket,其它的都会用到HTTP协议.scoket是一个长连接状态,这样才可以实时通讯.HTTP服务器没有办法想你发送数据,只有你请求的时候才可以的.
客户端发出请求,然后服务器端根据你的请求响应你
比如打开网站就是get请求,索取网址
请求
Accept:请求的数据类型是文本或者是xml
Accept-Charset:编码方式
Accept-Encoding:是否有压缩.
Accept-Language:内容的语言.
响应
网络请求方式
我们day_02加载图片在主线程上就是同步请求.
访问网络的基本流程
相关文章推荐
- WinSock实现多线程网络文件传输程序(一)(MFC+WinSock附源代码)
- c#初学日记:多线程扫描网络计算机1
- 抢先式多线程网络蜘蛛
- 多线程网络编程
- Java Socket 编程——多线程网络聊天程序
- 多线程 循环 更新 网络状态
- 抢先式多线程网络蜘蛛
- 多线程测试网络情况,不同网段的机器用nbtstat判断是否开机
- 网络传输之同步异步SOCKET通讯和多线程
- C#初学者日记:多线程扫描网络计算机2
- delegate 与 多线程(摘自网络)
- J2ME中多线程网络连接编程的分析
- Linux多线程程序设计,(网络上流传的一道题)
- Windows Forms 实现安全的多线程详解(附带程序代码示例) (摘自网络)
- 对前一段时间学习网络和多线程编程的总结
- 多线程与网络服务的关系(转载)
- C#中的多线程(摘自网络)
- Java Socket 编程——多线程网络聊天程序
- 抢先式多线程网络蜘蛛
- 抢先式多线程网络爬虫spider在智能搜索引擎中的实现