GCD和线程

Moh*_*ani 3 multithreading objective-c grand-central-dispatch ios

我想了解一些关于GCD和Threads的内容.

我的视图控制器中有一个for循环,它要求我的模型做一些异步网络请求.

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

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

现在,如果我要求我的视图控制器在不同的线程和循环的每次迭代中执行for循环,对模型的调用应该依赖于前一次迭代,我会在这里创建一个"初始"线程吗?

基本上,只有当前一个线程完全完成时,我才希望后续的异步请求到我的服务器(完全是指它的所有子线程也应该已经完成​​执行.)

我甚至无法正确地解决这个问题,因为我对自己大为困惑.但如果有人可以提供任何帮助,那将会有所帮助.

Tom*_*mmy 13

声明在一般情况下创建了五个线程是不正确的.

线程和块之间没有一对一的映射.GCD是线程池的实现.

根据该设备的最佳设置创建一定数量的线程 - 在该OS版本下创建和维护线程的成本,可用处理器核心的数量,已经拥有但当前被阻止的线程数量以及Apple关注的任何其他因素都可能是相关的.

然后GCD会在这些线程上传播您的块.或者它可能会创建新线程.但这不一定.

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

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

GCD将尽力在这种情况下做最好的事情.不要浪费你的时间试图再次猜测它.