multithreading - 我对这些概念的理解正确吗?

标签 multithreading web-services grand-central-dispatch

在我的大部分面试中,我都被问到有关 Web 服务和多线程的问题。我两者都没有做过,所以我决定进一步了解Web 服务使用 Grand Central Dispatch 进行多线程

  1. 对于 Web 服务,我的理解是您需要使用诸如 NSURLConnection 之类的类来获取数据。基本上设置一个新的 NSURL,然后是一个连接,然后是一个请求。您还需要使用 API 的方法,例如 didConnectdidReceiveDatadidFailLoadWithError。收到数据(通常为 JSON 或 XML 格式并存储为 NSData 对象)后,您可以存储它并解析它。有多种方法可以解析它,例如使用 SBJSON 或 NSXMLParser。然后您就可以用它做您需要的事情。

  2. 对于多线程,Grand Central Dispatch 是一种 C 风格的多线程方式。基本上,当您需要从主线程进行大量操作以避免应用程序卡住时,您可以使用它。您可以同步或异步调度。异步意味着主线程上的方法将继续执行,同步意味着不会。您永远不需要将 GCD 与 NSURLConnection 一起使用,因为 NSURLConnection 已经在后台完成其工作,然后在主线程中调用委托(delegate)。但是,为了保存和解压缩文件,您应该使用 GCD。当您调用dispatch_async时,您会传入一个调度队列。您可以使用串行队列或并发队列。串行队列将按照任务到达的顺序一次执行一个队列中的任务。这是默认设置。使用并发队列,并发执行的任务可能会同时执行。

我的第一个问题是,我对这两个概念有正确的理解吗?我知道关于 GCD 有很多东西需要学习,但我只是想确保我的基本想法是正确的。另外,使用 GCD,为什么有人想要同步调度,这不会违背多线程的目的吗?

最佳答案

同步分派(dispatch)的唯一原因是防止当前代码继续执行,直到关键部分完成。

例如,如果您想从共享资源中获取一些值并立即使用它,则需要同步调度。如果当前代码不需要等待临界区完成,或者可以简单地向同一个串行队列提交额外的后续任务,那么通常首选异步提交。

关于multithreading - 我对这些概念的理解正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716217/

相关文章:

WCF > 网络服务 : basicHttpBinding vs netTcpBinding

ios5 - 大中央调度 : How do I wait for the queue of blocks to complete?

c++ - pthread 执行时间比顺序执行时间差

java - 我可以在单线程中使用两个套接字吗?

Python 多线程列表追加给出了意想不到的结果

Java 网络服务 "HTTP status 404"- Eclipse、Apache、Tomcat

.net - 在 .NET 2008 (C#) 应用程序中添加对 Apache Tomcat 的 Web 服务引用失败

ios - NSOperationqueue后台,下载图片

ios - 录制后临时目录中的 AVPlayer 视频在几秒钟后停止播放

java - java当前线程数