2012-07-30 38 views
0

一個單一的文件我有一個對象「塊」,看起來像這樣的數組:多線程下載使用Objective-C

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 

還有一個下載對象持有的鏈接文件,它的大小和downloadedBytes。下載對象有一個數組作爲屬性(它保存塊)。

在例如6個線程中下載文件的最佳方式是什麼?每個線程一次下載一個塊(最後將它合併的想法)。我應該使用gdc還是某種隊列系統?

+0

你知道這個問題嗎? – 2013-09-28 05:36:39

回答

3

鑑於網絡通常是瓶頸,從單個服務器同時下載多個塊不會更快。事實上,由於爭用,它可能會變慢。 Safari等。將開始多次下載到不同的服務器,因爲很多網頁內容可以在下載完成之前呈現良好,並且每個不同的服務器都存在談判成本,在這種情況下,這些都不可能適用。

如果您真的需要這樣做,最好的辦法是使用多個異步URL連接,使用內置的類並讓系統自己處理併發。

+1

我的應用程序將從CDN下載文件,在使用多線程下載時速度方面存在顯着差異。 – Thunder 2012-07-30 15:54:21

+0

啊 - 好的 - 那會是罕見的情況。如果您的帶寬是在遠程端或在兩端之間進行調節,那麼確定 - 選擇多個通道。使用多個異步NSURLConnections(它們將在幕後處理排隊)。 – bbum 2012-07-30 21:41:15