1) 我正在创建一个 ios 应用程序,我必须在其中扫描 IP 地址池。每个都需要时间,所以我想在我的应用程序中实现多线程。 我正要使用线程类,但我怀疑我们可以同时创建多少个线程。 developer.apple 指南中提到每个线程将占用 512KB 内存。那么,如果我创建 100 个或更多线程,这不会让我的应用程序挂起吗?
2) 关于线程的一个疑问:当我将同一个对象传递给所有线程时,每个线程是否创建自己的对象(以进行操作)。实际上,它们都在执行相同的任务 3)如果我去GCD(grand central dispatch)那我有什么优势吗?即在这种特殊情况下对我有帮助。
3)另外,最后一件事。执行相似但需要同时执行的任务的最佳方法是什么(以提高性能)。笔记: 所有这些线程都使用相同的对象方法来执行任务。
谢谢和问候,如果我听起来很奇怪
最佳答案
IMO,最简单的做法是在单个线程(或 dispatch_async'd 的单个 block )中执行扫描,然后使用 kqueue有效地处理结果。 kqueue API 需要一点时间来适应,但它是一种做你想做的事情的有效方法。基本思想是:
- 创建一个kqueue
- 创建非阻塞套接字
- 在每个套接字上调用连接
- 将套接字添加到您的 kqueue 中,以便在连接成功或超时时唤醒您的线程。 man kqueue 了解如何执行此操作的详细信息。
- 在一个循环中,调用 kevent。这将阻塞,直到您 kqueue 匹配您正在等待的事件(超时或连接成功)。当没有要监视的套接字时退出您的线程。
关于iphone - 关于GCD和线程类之间区别的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664132/