使用C 多任务.线程或不同的设计

Multi tasking with C++. Threads or different design?

本文关键字:多任务 线程 使用      更新时间:2023-10-16

我一直使用脚本语言,例如页面运行,完成运行并提供输出的PHP。但是,我想在C 上做一些不同的事情,我需要多线程两个任务。

首先,主线程应运行,(假设)CPU温度计每1秒刷新一次,第二个线程应做其他事情。(就像在Windows目录下阅读所有目录一样。)

话;

  1. 使用线程是我唯一的机会,还是我可以在此任务中使用其他编程概念?

  2. ,尤其是在游戏中,背景上有很多事情运行。例如,适用于NPC/怪物的AI,图形引擎,物理引擎,播放器移动,键盘互动等。它们在一个过程中工作,因此如何处理?

创建一个用于仅读取CPU温度计的线程,并且每秒读取目录都超过了。多线程没有太大的收益,但可能会痛苦地管理线程。您可以将任务放在列表中,并以第二种方式安排它们。

我不确定游戏内容,但我相信他们在循环中对项目/任务进行分类和计划/检查/过程。为某些专用任务(例如套接字通信,GUI渲染等)创建了一些线程,但为每个项目创建一个专用线程,说蠕变过后。

我的建议是,如果您可以在一个线程中进行操作,则不要将多线程引入您的应用程序。多线程将创建其他副作用,例如同步问题,线程管理问题等。

您的挑战假定基于任务的并发性。因此,从异步工作(而不仅仅是基本线程)来考虑一下。HOWER,许多库为并发任务提供了安全,高效和可靠的高级异步API。我建议以下:

  1. QT带有QTConcurrent框架。
  2. Poco C 库带有多线程子部分。
  3. std :: async模板来自C 11。或boost ::旧环境线程。

我应该提到,标准的std :: async或boost替换在基于任务的并发方面存在不同的问题(它不提供许多功能来调整执行策略,例如,何时fork new threads,new new theack inter new Task等)

线程将是正确的选择。

一种替代(OS依赖性)是分叉子过程。是的,线程也是OS依赖性的,但至少对于C 11,对于Theese有标准的抽象。对于非C 11应用程序,如果有适当的端口,则易于使用为OS或Posix Pthreads Lib提供的各种线程API。

非常简单的操作系统的另一种选择是使用所谓的共同路线代替线程,例如弗雷托斯提供了这种方法。

详细说明您的点2):

这需要实现某种共享内存,以在运行自己的执行线程之间交换信息和状态。共享内存需要使用适当的同步机制,例如静音,读/写锁,信号量等。

在某些特殊情况下,实施自己的任务调度机制而不是依靠OS可能是有意义的。但这也需要一些中断的驱动机制来切换任务执行。

它取决于它们之间的具体任务和依赖项。

当您执行无关的任务时,我会在单独的过程中运行它们,在这里不需要线程。但是,如果您的耦合很强,则多线程可能是正确的答案。

您可以使用多个线程或多个进程。

线程和进程之间的一个关键区别是 threads share 一个内存空间,而每个过程每个过程具有其自己的内存空间

如果您的任务需要经常共享对象,例如在图中插入/删除/搜索/更新节点,多线程将允许每个线程通过指针轻松访问图形。在多个过程中,这更加困难。

如果您的任务不经常共享对象,例如测量温度,渲染图像,播放音乐,然后通过共享一个记忆空间不会看到太大的好处。在这种情况下,多个过程对您更好。