美文网首页
网络线程

网络线程

作者: J星O海E | 来源:发表于2021-07-14 01:25 被阅读0次

当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:1、1、com.apple.NSURLConnectionLoader

2、com.apple.CFSocket.private。

其中 CFSocket 线程是处理底层 socket 连接的。NSURLConnectionLoader 这个线程内部会使用 RunLoop 来接收底层 socket 的事件,并通过之前添加的 Source0 通知到上层的 Delegate。

NSURLConnectionLoader 中的 RunLoop 通过一些基于 mach port 的 Source 接收来自底层 CFSocket 的通知。当收到通知后,其会在合适的时机向 CFMultiplexerSource 等 Source0 发送通知,同时唤醒 Delegate 线程的 RunLoop 来让其处理这些通知。CFMultiplexerSource 会在 Delegate 线程的 RunLoop 对 Delegate 执行实际的回调。

查看CFSocket的源码,发现其确实会在首次创建CFSocket的时候创建一个叫CFSocket.private的线程并且通过 __CFSocketManager hold这个线程。

AFURLConnectionOperation 这个类是基于 NSURLConnection 构建的,其希望能在后台线程接收 Delegate 回调。为此 AFNetworking 单独创建了一个线程,并在这个线程中启动了一个 RunLoop:

当需要这个后台线程执行任务时,AFNetworking 通过调用 [NSObject performSelector:onThread:..] 将这个任务扔到了后台线程的 RunLoop 中。

最终完成网络数据通信的是 CFSocket 做底层

CFNetwork 是对 CFSocket 的封装,而 NSURLConnection 又是对 CFNetwork 的封装

NSURLSession 其实内部 还是使用了 NSURLConnection,因为进行数据通信时,还是会创建 com.apple.NSURLConnectionLoader这个子线程

系统完成网络请求时创建了两个系统子线程

com.apple.NSURLConnectionLoader 子线程

com.apple.CFSocket.private 子线程

com.apple.NSURLConnectionLoader 子线程 完成的事情

开启runloop 接收 CFSocket子线程 事件 ,应该是基于 端口 的事件

接收到基于 端口 的事件后,转换成 source0类事件

通知delegate

com.apple.CFSocket.private 子线程 完成的事情

主要是完成CFSocket底层网络数据通信

完成后像 NSURLConnectionLoader子线程 发送 端口消息

相关文章

  • JavaScript 执行机制

    五个线程 js引擎线程: 执行js代码GUI线程: 绘制用户界面http网络请求线程: 处理网络请求, 等请求返回...

  • NoSQL数据库:Redis适用场景及产品定位

    1.网络IO模型Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程...

  • Reactor模式

    Blocking IO下线程模型 单线程模型   单线程模型将网络监听、网络IO处理和业务处理逻辑全部放在一个线程...

  • 218集 生产者消费者环境

    219线程 任务调度 220 线程总结 221课 网络编程_概念_网络_端口_URL_TCP_UDP 网络编程是网...

  • iOS-多线程中的信号量

    网络请求的任务是提交给子线程异步处理了,对于主线程网络请求这样的任务也就快速执行完毕了,但是对于主线程网络请求是一...

  • 假如让你自己写个图片加载框架,你会考虑哪些问题?

    异步加载:线程池由于网络会阻塞,所以读内存和硬盘可以放在一个线程池,网络需要另外一个线程池,网络也可以采用Okht...

  • 2018-03-19

    浏览器内核包含哪些线程 答:GUI线程、js引擎线程、事件触发线程、网络请求线程、(定时器触发线程) GUI线程是...

  • iOS知识体系

    UI 网络 多线程

  • redis单线程原理

    redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求...

  • 多线程、网络-整理中

    多线程、网络-整理中

网友评论

      本文标题:网络线程

      本文链接:https://www.haomeiwen.com/subject/buakpltx.html