线程的实际用途

时间:2009-02-22 01:01:06

标签: multithreading

在你的工作中,具体使用了什么线程?

(请说明应用程序以及线程如何帮助/增强应用程序。)

15 个答案:

答案 0 :(得分:4)

线程对于大多数UI工作至关重要。否则,只要您想进行计算或需要一段时间的任何事情,您都将冻结UI。

因此,大多数GUI框架都有UI线程来处理事件循环(以及一些绘图活动),但大多数用户代码都在另一个线程中进行。

线程对于偶尔检查事物或对系统状态进行偶然的更改也很有用。

答案 1 :(得分:4)

(不太严肃的回答)我喜欢在任何情况下使用线程,我希望系统以有趣和不明显的方式落在它的屁股上,同时仍然有可能的否认我如何让问题漏掉。 / p>

或者,用Rasmus Lerdorf的话来说,“人们不够聪明,不能编写线程安全的代码”。

答案 2 :(得分:2)

处理服务器中的并发客户端请求。

答案 3 :(得分:2)

线程是大多数I / O绑定应用程序的基础,也适用于任何相当复杂的服务器端应用程序。考虑一个应用程序,它充当多个数据源的信息交换。您需要能够在独立线程中处理此信息,特别是如果对此数据的操作受延迟或需要大量时间才能完成。

在大多数情况下,线程通常有助于解耦应用程序中的各种问题。在绝大多数情况下,单个线程向感兴趣的各方发送事件的能力不会很好。

除了最简单的应用程序外,所有应用程序都需要在某种程度上进行线程化。

答案 4 :(得分:1)

最常见的用途是响应式用户界面,例如为长时间运行的后台任务显示进度条。

答案 5 :(得分:1)

后台任务:

  • 处理网络连接和协议。
  • 在多媒体应用程序的后台运行声音合成。
  • 在多媒体应用程序(CD流媒体)中在后台执行文件加载

其他用途:

  • 通过在两个不同的线程中运行相同代码的两个实例来加速某些算法。

答案 6 :(得分:1)

我知道大多数时候我使用线程,我实际想要做的是启动一些异步工作 - 即我希望在神秘的“背景”中发生一些事情。不幸的是,考虑线程并不是真正的“抽出一些工作”的正确抽象级别,因为你没有把东西放到后台。使用线程API,您可以创建另一个位置来运行作为进程原始线程的兄弟,并且需要担心它们之间共享的信息,以及如何等等。这就是我喜欢Cocoa NSOperationNSOperationQueue等新API的原因。在该API的情况下,启动一些工作只是一行,并且库负责是否应该启动新线程或重新使用旧线程。

答案 7 :(得分:0)

扫描查找已更改文件的目录。每个子目录生成一个线程然后在一个线程中执行它会快得多。

答案 8 :(得分:0)

我们一直在为多个应用程序使用线程,其中主屏幕由为当前登录用户量身定制的工作流程组成。

获取工作流程可能非常耗时。工作流的各个部分由不同的线程加载。对于我们的主要应用程序BP / GeNA,将触发大约11个线程,每个线程都运行数据库查询。

的问候,
利芬

答案 9 :(得分:0)

当我想要使用一堆资源时,我最常使用线程,我知道这将需要很长时间,当处理元素的工作之间没有相互依赖性时,特别是如果瓶颈不是本地的资源(如磁盘的CPU)。例如,如果我有一堆要检索的URL,那么每个URL都将进入一个单独的线程。

答案 10 :(得分:0)

这是一个非常普遍的问题。我已经使用“线程”从UI线程中获取潜在的阻塞工作,无论该工作是本地还是网络i / o,或者工作是计算密集型任务,根据运行的硬件,它将倾向于“阻塞” 。

我认为询问有助于减轻它的特定问题或模式以及线程的适用性更为有趣,即:

  • 线程如何与模型相关 查看控制器?
  • 我应该怎样或为什么 从UI线程中解脱出来 确保用户界面甚至没有想到 封锁?
  • 线程池怎么样? 对递归有用(网络) 目录遍历其他人 暗示?
  • 我应该亲和 用于协同调度的线程 计算密集型任务,或 我应该使用ThreadPool和 让操作系统先发制人 它认为适合的线程。

这是一个相当广阔的空间,更清晰可能会有所帮助。

答案 11 :(得分:0)

我构建了Web应用程序,因此我编写的所有代码都在多个线程中执行。

答案 12 :(得分:0)

我们的应用程序是一个Web服务,因此我们根据请求生成一个线程。从技术上讲,JNI会产生线程,但代码必须是线程安全的。我们在Hibernate和基于ESB的基础架构上遇到了一些有趣的(FSVO)问题,但是大多数情况下保留ThreadLocals并在子系统入口点上进行同步已经很好了。我们还没有尝试过多于几十个同时发出的请求,所以我们还没有确定一些竞争条件,但总的来说我们是高效的并给出了正确的答案。

答案 13 :(得分:0)

我编写了一个函数,它会定期生成一个发出哔哔声的线程(从发言者那里发出哔哔声),以提醒测试操作员注意某些事情。响应模态对话框后,线程被终止。

答案 14 :(得分:0)

与就业无关,但我正在Netflix Prize做一些侧面工作。我的计算机有8个核心和20 GB的RAM ...只运行1个线程将是一个完全浪费,所以我通常开始16个线程左右。