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

时间:2012-07-30 10:59:41

标签: 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;
@property (atomic) State *chunkState;

@end

还有一个Download对象,它包含文件,大小和downloadedBytes的链接。下载对象有一个数组作为属性(保存块)。

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

1 个答案:

答案 0 :(得分:3)

鉴于网络通常是瓶颈,从单个服务器同时下载多个块不会更快。事实上,由于争用,它可能会变慢。 Safari等。 al。,将开始多次下载到不同的服务器,因为很多网页内容可以在下载完成之前很好地呈现,并且每个不同的服务器都存在协商成本,这些都不适用于这种情况。

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