2012-03-12 107 views
1

1)我正在創建一個ios應用程序,我必須在其中掃描IP地址池。每個人都需要時間,所以我想在我的應用程序中實現多線程。 我正要使用線程類,但我懷疑有多少線程可以創建simuntaneoulsy。它在developer.apple指南中提到每個線程都需要512KB的內存。所以,不會讓我的應用程序掛起,假設我創建了100個線程或者可能更多? 2)有關線程的一個疑問:當我將同一個對象傳遞給所有線程時,是否每個線程都創建它們自己的對象(實際上,它們都執行相同的任務) 3)如果我去GCD(大中央派遣)那麼我有什麼優勢?即在這種特殊情況下能否幫助我。關於GCD和線程類別之間的區別的疑問

3)另外,最後一件事。執行類似任務但需要同時執行的任務(以提高性能)的最佳方式是什麼?注意: 所有這些線程使用相同的對象方法來執行任務。

感謝和問候,如果我聽起來不可思議

回答

0

IMO,以最簡單的做法是在一個單獨的線程(或者是dispatch_async'd單塊)執行您的掃描,然後用kqueue處理結果有效。 kqueue API需要一點時間來適應,但它是一種有效的方式來實現你想要的。其基本思想是:

  1. 創建的kqueue
  2. 創建非阻塞套接字
  3. 呼叫連接每個插座上
  4. 加上插座你的kqueue這樣,它會喚醒你的線程了當連接成功或超時。詳細的人kqueue如何做到這一點。
  5. 在循環中調用kevent。這會阻塞,直到你的kqueue匹配你正在等待的事件(超時或連接成功)。沒有插座留下來監視時退出線程。