使用C 多任务.线程或不同的设计
Multi tasking with C++. Threads or different design?
我一直使用脚本语言,例如页面运行,完成运行并提供输出的PHP。但是,我想在C 上做一些不同的事情,我需要多线程两个任务。
首先,主线程应运行,(假设)CPU温度计每1秒刷新一次,第二个线程应做其他事情。(就像在Windows目录下阅读所有目录一样。)
话;
-
使用线程是我唯一的机会,还是我可以在此任务中使用其他编程概念?
-
,尤其是在游戏中,背景上有很多事情运行。例如,适用于NPC/怪物的AI,图形引擎,物理引擎,播放器移动,键盘互动等。它们在一个过程中工作,因此如何处理?
创建一个用于仅读取CPU温度计的线程,并且每秒读取目录都超过了。多线程没有太大的收益,但可能会痛苦地管理线程。您可以将任务放在列表中,并以第二种方式安排它们。
我不确定游戏内容,但我相信他们在循环中对项目/任务进行分类和计划/检查/过程。为某些专用任务(例如套接字通信,GUI渲染等)创建了一些线程,但为每个项目创建一个专用线程,说蠕变过后。
我的建议是,如果您可以在一个线程中进行操作,则不要将多线程引入您的应用程序。多线程将创建其他副作用,例如同步问题,线程管理问题等。
您的挑战假定基于任务的并发性。因此,从异步工作(而不仅仅是基本线程)来考虑一下。HOWER,许多库为并发任务提供了安全,高效和可靠的高级异步API。我建议以下:
- QT带有QTConcurrent框架。
- Poco C 库带有多线程子部分。
- 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 一个内存空间,而每个过程每个过程具有其自己的内存空间。
如果您的任务需要经常共享对象,例如在图中插入/删除/搜索/更新节点,多线程将允许每个线程通过指针轻松访问图形。在多个过程中,这更加困难。
如果您的任务不经常共享对象,例如测量温度,渲染图像,播放音乐,然后通过共享一个记忆空间不会看到太大的好处。在这种情况下,多个过程对您更好。
- 用于矢量处理的多个线程
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 一个线程等待多个线程事件
- std::cout 来自多个线程
- 多个线程可以安全地同时将相同的值写入同一变量吗?
- 将执行循环拆分为多个线程 (1-N-1-N-1..)
- 唤醒多个线程以在每个条件下工作一次
- 多个线程可以同时在同一接口上嗅探吗?
- cuda:多个线程访问同一个全局变量
- asio::io_service 具有多个线程的优先级队列处理
- 多个线程可以读取同一个类成员变量吗?
- C++ - 如何不错过来自多个线程的多个通知?
- 将正常函数的工作分配给多个线程是否安全
- 是boost :: asio :: thread_pool线程在多个线程上发布任务时的安全性
- 如何在多个线程上正确分发任务
- 使用C 多任务.线程或不同的设计
- 计算多个线程同时调用的方法中任务的持续时间