Physx线程调研

在服务器运行过程中,发现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();

	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:
			int					m_iSimulatorWork;
			int					m_iBackWork;
			bool				m_bExcuting;
			std::vector<NxTask*> m_arTask;
		};	


3.使用性能监测工具对线程CPU使用进行监测。发现主线程的CPU使用率和进程CPU使用率完全相同,其他的4个线程CPU使用率为0,context switch次数几乎为0.01-0.03次/s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值