Physx线程调研
来源:互联网 发布:剑侠情缘3捏脸数据成男 编辑:程序博客网 时间:2024/05/15 02:24
在服务器运行过程中,发现Physx线程竟然增加到了8个。非常奇怪。然后我对Physx的线程进行了一次调研,以了解这些线程的功能和这些线程是否可控。
1.Physx文档中涉及的线程有3种
a.Simulator线程。如果设置了NX_SF_SIMULATE_SEPARATE_THREAD会使得每个sence在simulator和fetchresult之间开启一个线程进行物理模拟。我们称之为模拟线程。如果不设置该标志则使用主线程进行模拟。
b.Work线程。如果设置了NX_SF_SIMULATE_SEPARATE_THREAD标志,可以通过设置internalThreadCount属性开启多个任务线程对Simulator的内容进行并行模拟。我们称之为工作线程
c.background线程。可以通过设置backgroundThreadCount设置该线程个数。该线程可以处理查询内容,已经GPU数据的预处理。我们称之为后台线程。
我们已经如下场景设置
sceneDesc.flags &= ~NX_SF_SIMULATE_SEPARATE_THREAD;
sceneDesc.internalThreadCount = 0;
sceneDesc.backgroundThreadCount = 0;
但是运行过程中,一开始就是2个线程,中间最高线程数5线程,过了1分钟左右又会降到2线程,并稳定在2线程。
2.在设置的基础上,设置Scheduler如下。但是Scheduler没有被调用。线程数照旧。
sceneDesc.backgroundThreadCount = 0;
sceneDesc.customScheduler = new Scheduler();
3.使用性能监测工具对线程CPU使用进行监测。发现主线程的CPU使用率和进程CPU使用率完全相同,其他的4个线程CPU使用率为0,context switch次数几乎为0.01-0.03次/s
1.Physx文档中涉及的线程有3种
a.Simulator线程。如果设置了NX_SF_SIMULATE_SEPARATE_THREAD会使得每个sence在simulator和fetchresult之间开启一个线程进行物理模拟。我们称之为模拟线程。如果不设置该标志则使用主线程进行模拟。
b.Work线程。如果设置了NX_SF_SIMULATE_SEPARATE_THREAD标志,可以通过设置internalThreadCount属性开启多个任务线程对Simulator的内容进行并行模拟。我们称之为工作线程
c.background线程。可以通过设置backgroundThreadCount设置该线程个数。该线程可以处理查询内容,已经GPU数据的预处理。我们称之为后台线程。
我们已经如下场景设置
sceneDesc.flags &= ~NX_SF_SIMULATE_SEPARATE_THREAD;
sceneDesc.internalThreadCount = 0;
sceneDesc.backgroundThreadCount = 0;
但是运行过程中,一开始就是2个线程,中间最高线程数5线程,过了1分钟左右又会降到2线程,并稳定在2线程。
2.在设置的基础上,设置Scheduler如下。但是Scheduler没有被调用。线程数照旧。
sceneDesc.backgroundThreadCount = 0;
sceneDesc.customScheduler = new Scheduler();
class Scheduler : public NxUserScheduler{public:Scheduler(){m_iSimulatorWork = 0;m_iBackWork = 0;}virtual void addTask(NxTask *task) { m_arTask.push_back(task); m_iSimulatorWork++;} virtual void addBackgroundTask(NxTask *task) { //Add task to background work queue. m_arTask.push_back(task);m_iBackWork++;} virtual void waitTasksComplete() { //Wait for all tasks in the work queue to complete. while(m_bExcuting){;}return;}virtual void Tick(){m_bExcuting = true;for (std::vector<NxTask*>::iterator vIt = m_arTask.begin(); vIt != m_arTask.end(); vIt++){(*vIt)->execute();}m_bExcuting = false;}private:intm_iSimulatorWork;intm_iBackWork;boolm_bExcuting;std::vector<NxTask*> m_arTask;};
3.使用性能监测工具对线程CPU使用进行监测。发现主线程的CPU使用率和进程CPU使用率完全相同,其他的4个线程CPU使用率为0,context switch次数几乎为0.01-0.03次/s
- Physx线程调研
- PhysX
- 线程死锁调研
- Linux进程池、线程池调研
- 调研
- 调研
- 调研
- Physx简介
- PhysX结构图
- Physx Trigger
- physX 的内存管理
- PhysX官方手册翻译
- Havok和Physx对比
- physx学习手记
- PhysX使用总结
- Havok和Physx对比
- PhysX物理引擎入门
- PhysX官方教程lession101
- 实现国际化
- JSON 数据格式
- 发现瓶颈 - Profiling(程序剖析) - SHOW PROFILE
- 如何在视图类中获取主窗口指针 .
- session 基础总结
- Physx线程调研
- Debian 6.0.6 系统安装第十二步: 安装TFTP
- 关于org.springframework.transaction.CannotCreateTransactionException问题
- 用.net写的windows服务无法自动启动。
- wenku(二)
- 虚拟机bochs使用配置
- 许多测试人员使用shell脚本搭建各种环境和平台,看来shell脚本很强大,shell编程走起~~不断更新中
- linux 下fcntl的使用
- 用shc加密shell脚本