iphone - 关于GCD和线程类之间区别的疑问

标签 iphone ios multithreading mobile

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

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

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

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

最佳答案

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

  1. 创建一个kqueue
  2. 创建非阻塞套接字
  3. 在每个套接字上调用连接
  4. 将套接字添加到您的 kqueue 中,以便在连接成功或超时时唤醒您的线程。 man kqueue 了解如何执行此操作的详细信息。
  5. 在一个循环中,调用 kevent。这将阻塞,直到您 kqueue 匹配您正在等待的事件(超时或连接成功)。当没有要监视的套接字时退出您的线程。

关于iphone - 关于GCD和线程类之间区别的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664132/

相关文章:

ios - 关于 Interface Builder 组件发布

ios - 快速重新加载数据后未调用 cellforrowatindexpath

java - 通过telnet连接esp8266 android

iPhone:在哪里存储用户名和密码凭据?

iphone - 我可以在多台机器上使用同一个 iPhone 开发者计划帐户吗?

ios - React Native如何模拟 "align-items: baseline"?

c++ - std::thread 构造和执行

c++ - 减少 Linux 中的每个线程内存

iphone - 如何从 iPhone 上的应用程序打开其他应用程序

iphone - 如何绘制移动的激光束?