这些东西的意义就是把东西从“听说过”和“知道”上升为可以随心所欲的用出来用得好,这也是开这个thread的真正原因,编程的时候突然发现一个比较简单的东西会需要思考一下,没有在大脑里立刻浮现最佳解决方案/可能踩雷的地方/各种情况下的变通。
- command buffer with ring/double buffer
- ThreadSafeAssert
command buffer with ring/double buffer
基本上这个模式
advantages:
- 高效而且优雅, command可以解决的问题几乎都可以用SetFlag->DetectFlag->CallFunction的模式来完成,但是相比之下command高效而且优雅。
- 有进一步多线程的潜质----如果push进来的是particle 的update command,那么就可以用task多线程系统来consume这些command。
conditions:
- 像mainthread和renderthread之间做resource creation这种情况,是有桢同步的概念,而且renderthread也不会一直去监控resource的情况,那么double buffer,然后sync点做swap比较合适。
- renderthread和gpu这种,gpu只做一件事情就是consume command来处理,可以说一直在监控command的情况,那么ringbuffer是最佳选择。
ThreadSafeAssert
有些东西假设它是需要在同一个thread中运行的,因此为了安全就没有做thread safe的限制。
这个时候可以用assert做thread id的检测。
比如SmartPointer的RefCountObj.
当然这种assert方式可以推广到很多地方。
UniqueId