在Objective-c中多线程下载单个文件

在Objective-c中多线程下载单个文件,objective-c,multithreading,cocoa,Objective C,Multithreading,Cocoa,我有一个数组,其中有一个对象“Chunk”,如下所示: typedef enum { Connecting = 0, Downloading, Finished, Error } State; @interface Chunk : NSObject @property (atomic) uint64_t startingByte; @property (atomic) uint64_t endingByte; @property (atomic) NSString *md5; @proper

我有一个数组,其中有一个对象“Chunk”,如下所示:

typedef enum
{
Connecting = 0,
Downloading,
Finished,
Error
} State;

@interface Chunk : NSObject

@property (atomic) uint64_t startingByte;
@property (atomic) uint64_t endingByte;
@property (atomic) NSString *md5;
@property (atomic) State *chunkState;

@end
还有一个下载对象,它保存文件的链接、大小和下载字节。下载对象有一个数组作为属性(保存块)


在例如6个线程中下载文件的最佳方式是什么?每个线程一次下载一个块(想法是在最后合并它们)。我应该使用gdc还是某种队列系统?

考虑到网络通常是瓶颈,从单个服务器同时下载多个数据块不会更快。事实上,它可能会因为争用而变慢。Safari等人将开始向不同的服务器进行多次下载,因为很多网页内容都可以在下载完成之前呈现出来,并且需要与每个不同的服务器进行协商,而在这种情况下,所有这些都不可能适用


如果确实需要这样做,最好的办法是使用内置类使用多个异步URL连接,并让系统自己处理并发性。

鉴于网络通常是瓶颈,从单个服务器同时下载多个块不会更快。事实上,它可能会因为争用而变慢。Safari等人将开始向不同的服务器进行多次下载,因为很多网页内容都可以在下载完成之前呈现出来,并且需要与每个不同的服务器进行协商,而在这种情况下,所有这些都不可能适用


如果您确实需要这样做,最好使用内置类使用多个异步URL连接,并让系统自行处理并发。

我的应用程序将从CDN下载文件,当使用多线程下载时,在速度上有很大的差异。啊——好吧——这是罕见的情况。如果在远程端或两者之间带宽受限,那么——当然——选择多个通道。使用多个异步NSURLConnection(它们将处理后台排队)。我的应用程序将从CDN下载文件,使用多个线程下载时,速度会有显著差异。啊——好吧——这是罕见的情况。如果在远程端或两者之间带宽受限,那么——当然——选择多个通道。使用多个异步NSURLConnections(它们将在后台处理排队问题)。您发现这个问题了吗?您发现这个问题了吗?