gpt4 book ai didi

ios - GCD 和线程

转载 作者:可可西里 更新时间:2023-11-01 06:19:10 24 4
gpt4 key购买 nike

我想了解一些关于 GCD 和线程的知识。

我的 View Controller 中有一个 for 循环,它要求我的模型执行一些异步网络请求。

因此,如果循环运行 5 次,模型将发出 5 个网络请求。

考虑到我正在使用 NSURLConnection 的 sendAsyncRequest 并且将在另外 5 个线程上调用完成处理程序这一事实,声明我的模型已经创建了 5 个线程是否正确?

现在,如果我要求我的 View Controller 在不同的线程上执行这个 for 循环,并且在循环的每次迭代中,对模型的调用应该依赖于前一次迭代,我是否会创建一个“Inception”线程在这里?

基本上,只有在前一个线程完全完成时,我才希望对我的服务器发出后续异步请求(完全是指它的所有子线程也应该完成执行。)

我什至无法正确地提出问题,因为我自己也很困惑。但是,如果有人可以提供任何帮助,那将会很有帮助。

最佳答案

说一般情况下创建了五个线程是不正确的。

线程和 block 之间没有一对一的映射。 GCD 是线程池的一种实现。

一定数量的线程是根据该设备的最佳设置创建的——在该操作系统版本下创建和维护线程的成本、可用处理器内核的数量、它已经拥有的线程数量目前被阻止以及 Apple 考虑考虑的任何其他因素都可能是相关的。

然后 GCD 会将您的 block 分布到这些线程上。或者它可能会创建新线程。但不一定。

除此之外,队列只是在 block 之间建立排序的方法。串行调度队列不一定拥有自己的线程。所有并发调度队列不一定拥有自己的线程。但是没有理由相信任何一组队列共享任何线程。

为 block 选择线程的确切方法在操作系统版本之间发生了变化。例如。 iOS 4 在线程创建方面非常挥霍,这是 iOS 5+ 绝对没有的。

GCD 只会尝试在这种情况下做最好的事情。不要浪费时间去猜测它。

关于ios - GCD 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com