怀疑GCD和线程类之间的区别

时间:2012-03-12 09:00:34

标签: iphone ios multithreading mobile

1)我正在创建一个ios应用程序,我必须扫描一个IP地址池。每个人都需要时间,所以我想在我的应用程序中实现多线程。 我即将使用线程类,但我怀疑我们可以创建多少线程simuntaneoulsy。它在developer.apple指南中提到每个线程将占用512KB内存。那么,不会让我的应用程序挂起,假设我创建了100个线程,或者可能更多那个?

2)关于线程的一个疑问:当我将同一个对象传递给所有线程时,每个线程都创建自己的对象(操作)。实际上,它们都在执行相同的任务 3)如果我去GCD(大中央调度)那么我有什么优势吗?即在这种特殊情况下会帮助我。

3)另外,最后一件事。什么是执行相似但需要同时执行的任务的最佳方式(为了提高性能)。注意: 所有这些线程都使用相同的对象方法来执行任务。

感谢和问候,如果我听起来很奇怪

1 个答案:

答案 0 :(得分:0)

IMO,最简单的方法是在单个线程(或者是dispatch_async'd的单个块)中执行扫描,然后使用kqueue来有效地处理结果。 kqueue API需要一点时间习惯,但却是一种有效的方式来做你想要的。基本思路是:

  1. 创建一个kqueue
  2. 创建非阻塞套接字
  3. 在每个插座上调用connect
  4. 将套接字添加到kqueue中,以便在连接成功或超时时将线程唤醒。 man kqueue详细说明如何做到这一点。
  5. 在一个循环中,调用kevent。这将阻塞,直到你kqueue匹配你正在等待的事件(超时或连接成功)。当没有剩余的插座要监控时退出你的线程。