2015-09-09 36 views
0

在開發與套接字連接有關的Android應用程序之前,我總是需要打開一個新的線程來處理它們,否則會出錯肯定會發生。另一方面,當我在iOS應用程序中做同樣的事情時,我不需要打開一個新的線程來處理這些套接字連接,而且我的UI仍然運行平穩。我不明白爲什麼會發生這種情況。爲什麼在iOS中打開套接字連接時不需要打開新線程

我已經做了一些研究,但是我沒有找到解釋這個問題的任何資料。

請幫我理解這一點。提前感謝!

+1

根據您使用的是什麼iOS API,它可能會執行與事件循環集成的異步/非阻塞I/O。 Android可能會或可能不會提供此功能;我不確定。 – icktoofay

+1

你使用庫來做套接字,比如GCDAsyncSocket?因爲那會處理你的線程 – Fonix

+0

@Fonix是的,我也使用它。所以這就是爲什麼。多麼愚蠢的我,沒有想到... –

回答

1

正如@Fonix所指出的那樣,如果您使用的是GCDAsyncSocket,它會爲您處理併發。但是如果你閱讀GCDAsyncSocket代碼,你會注意到它從來不會產生任何線程。在iOS中幾乎沒有產生自己的線程。提及NSThread幾乎總是一個錯誤。 iOS併發性基於隊列,由GCD(Grand Central Dispatch)管理。隊列最終映射到線程,但這是一個內部細節,並不是1:1映射。

您需要閱讀Concurrency Programming Guide,特別是「遠離線程遷移」,以瞭解iOS如何管理併發。它與Android完全不同,這種誤解通常會造成大量破壞的iOS代碼。

+0

謝謝,這很好解釋。我會讀到的。 –

相關問題