使用单个(额外)线程进行多线程编程

时间:2010-12-18 10:27:20

标签: multithreading

我正在考虑使用单个循环线程函数来利用多线程编程的想法。然而,这是一个简单的理论,所以我想知道你的想法是什么,因为它可能是错误的。

一个例子可能是在应用程序周围的分散位置多次调用单个函数。虽然很难简单地对它进行并行编程,但是可以有一个额外的线程循环使用布尔值来检查“我们是否需要这个函数”,如果是,则执行它。

甚至可以远程使用应用程序吗?

我怀疑它会因为它的“调用”之间的一些“滞后”而变慢,它通过boolean / var和它实际执行需要的函数。

编辑:我想到了一个快速函数,我想如果调用的函数非常慢(完成),它可能是可行的。

然后,我们需要处理线程安全和简单并发,所以这可能都是错误的。

3 个答案:

答案 0 :(得分:1)

您正在使用fibersevent driven programming等查看libevent与简单glib之间的某处。在Java中,可以使用Green threads

答案 1 :(得分:1)

使用线程时你会变得更好(就像任何东西一样)但是想法是调度到辅助线程处理可以独立于其他任务运行的任务。让你前进的一个好习惯是编写一个按需进行一些计算的线程,然后通过回调函数返回它的结果。

开发移动应用程序时经常出现的一个例子是需要从Web服务器获取图像。这是一个耗时的操作,它可能会失败,所以我希望它发生在一个单独的线程上。如果我的应用程序获得图像,那很好。如果它失败了,那也没什么大不了的。

因此,假设用户正在运行我的应用,我们应该展示一些艺术作品。

  • 首先,我显示一个占位符图像或者可能是一个微调器
  • 我创建了一个带有一些参数的新线程(通过结构或类似的方式传递)
  • 参数可能是查找的网址,也是我拥有图片后要调用的函数。
  • 新线程启动并查找网址。如果失败,它就会退出。
  • 如果获取图像并验证它是否正确,它现在调用传入的回调函数将图像传递给想要它的线程。
  • 有许多方法可以跨线程传递数据,但您必须了解并发问题(竞争条件,死锁)以及它们的发生方式。

在最简单的情况下,两个线程将共享一个互斥锁。这种类型的对象通过保护数据资源有助于促进线程之间的同步。传递图像的线程将锁定互斥锁。这使它可以独占访问数据资源,可能是图像队列,它可以粘贴图像。然后它解锁互斥锁。它的工作现在已经完成,因此图像获取器线程可以退出。

在运行过程中,想要图像的线程需要定期检查图像队列以查看是否有新图像。它锁定互斥锁,检查队列并在找到图像时复制出图像,然后解锁互斥锁。

这是将线程与共享资源一起使用的最基本情况之一。随着您了解更多信息,除了互斥锁之外,您还可以发现用于信令线程和其他许多类型操作的其他结构。

一本关于线程和同步的更多内容的好书是Andrew Tanenbaum的操作系统手册。对于大多数计算机科学专业的学生来说,通常需要阅读,并且会教你很多。看看here

答案 2 :(得分:1)

你可以触发一个线程来执行一个函数,但是调用者可能仍然想等待结果。根据定义,线程对于可以以隔离形式完成的过程是有用的。不只是任何调用都适合被线程化。

如果您定义了这样一个进程,那么一次执行多个线程可能会很好。我没有看到任何使用一个单独的线程只是从队列中调用函数的用法。 例如,它可以在报告工具中使用。为了最大限度地减少数据库负载,您可以选择一次只执行一个或少量报告。报告完成后,线程可以从队列中获取新报告。

为了实现这样的东西,我将构建(并且实际上已经构建)连接池和胎面池。如果您也想构建类似的东西,我建议您搜索互斥(原子/关键部分)和信号量。