Iphone 关于GCD和线程类之间差异的疑问

Iphone 关于GCD和线程类之间差异的疑问,iphone,ios,multithreading,mobile,Iphone,Ios,Multithreading,Mobile,1) 我正在创建一个ios应用程序,其中我必须扫描IP地址池。每一个都需要时间,所以我想在我的应用程序中实现多线程。 我正要使用thread类,但我怀疑我们可以创建多少线程来实现simuntaneoulsy。它在developer.apple指南中提到,每个线程将占用512KB内存。所以,假设我创建了100个线程或者更多线程,这不会让我的应用程序挂起吗 2) 关于线程的一个疑问是:当我将相同的对象传递给所有线程时,每个线程是否都创建了自己的对象(要操作)。实际上,它们都在执行相同的任务 3) 如

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

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

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


谢谢大家,如果我听起来怪怪的,最简单的方法就是在一个线程(或者是一个dispatch_async'd的块)中执行扫描,然后使用a高效地处理结果。kqueue API需要一点时间来适应,但它是一种高效的方式来完成您想要的任务。基本思想是:

  • 创建一个队列
  • 创建非阻塞套接字
  • 在每个插座上调用connect
  • 将套接字添加到队列中,以便在连接成功或超时时唤醒线程。有关如何执行此操作的详细信息,请排队等候
  • 在循环中,调用kevent。这将一直阻止,直到队列匹配您正在等待的事件(超时或连接成功)。当没有要监视的套接字时退出线程