您的位置:首页 > 理论基础 > 计算机网络

多线程和网络

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加载图片在主线程上就是同步请求.

访问网络的基本流程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: