看了知乎原题后补充:
我一开始就搞错了题主想问什么(捂脸)。
从软件层面上讲,世界上确实没有什么程序是单线程的,因为单线程程序的交互性很差,举个很简单的例子,大家都可以一边打电话一边看电脑,单线程程序就做不到,只能停下打电话的动作去看电脑,或者停下看电脑去打电话,这样的程序肯定是糟糕的。
关于多进程,线程可以看作是轻量级的进程,一个进程下可以“挂载”多个线程,更多的信息还是参考计算机组成原理之类的书籍吧,我有一年多没看过了,描述上难免不够严谨。
题主想问的,一部分上是在逻辑上多任务并行。逻辑上多任务并行是个世界性难题,针对不同的逻辑有不同的优化方法,就知乎原题主提到的游戏中,我挑个我还算熟悉的,石炉。石炉应当有主线程不断roll随机事件,有分线程处理每个小人的动作,我甚至认为每个小人的行动都是由一个以上线程决定的,而这么多线程肯定有不同的优先级,优先级调度就是个难题,想在这方面做文章,太难,需要大量的实验和耐心,用开发周期堆出来。
另一部分是多核CPU均衡负载的问题,这个开发者真做不了优化。游戏开发者一般用开发游戏的引擎的开发者提供的工具(也就是游戏引擎,废话真多),而开发游戏引擎的人用的又是操作系统开发者提供的工具,操作系统开发者想要控制CPU用的又是CPU厂家提供的工具,按照冤有头债有主的观点,多核CPU均衡负载是CPU厂家的问题。
至于说win10可以自行优化多核CPU的负载,虽然有可能,但这个我真的不信。就算微软财大气粗,搞了一大帮工程师专门搞多核CPU负载优化,那这帮工程师还逮分成好几批人,一部分搞因特尔的酷睿,一部分人搞因特尔的E系列,一部分人搞AMD的,还要有人搞ARM的,难度太大。
以下是原答案
首先,你怎么看出对CPU利用效率低的?
然后,在PS平台我不清楚,但windows平台下,多进程设计是不被鼓励的,证据就是你在运行游戏时,打开任务管理器,和你运行着的那个游戏相关的“任务”一般只有一个,这就是说你正在运行的那个游戏是个“单一进程”。
关于进程和线程的区别,你只要知道多线程不会在任务管理器里看到,但多进程会就好。详细的信息在windows平台下只有微软的工程师知道,在类Unix环境下进程和线程的区别能写一本好几百页的书。
在继续之前,我很负责的告诉题主,世界上正二八经单进程又单线程的软件你几乎见不到,就算是代码写的很烂的独立游戏也是这样,游戏引擎,或者说开发工具会自动优化,在一般开发者都看不到的地方就做了多线程处理了。
如果题主你真的通过某种方式(或某些软件)发现了CPU利用效率低(其实你这句话就是错的),这一定和单线程无关,而和CPU厂家和操作系统厂家有关。更具体的需要题主有一定计算机组成原理的知识,你只要记住,在游戏这种程度的软件开发上,开发者几乎不关心多进程/多线程的问题,他们属于低层问题。现在稍高级一点的开发语言都不支持直接操作内存(一般常说不支持“指针”),多进程/线程更是只和操作系统有关,如果你用的编程语言既没有**作系统(比如windows)提供的多进程/线程语句,又不支持内嵌其他语言,那你只好认为你所编写的程度都是单线程且单进程的了,实际上如何由编译器决定,你无从知晓。
至于为什么“CPU利用效率低”,实际上这个问题是出在“多核CPU”身上的。多核CPU具有多个运算核心,这样可以提高速度和多进程/线程能力,但在多个运算核心中均匀负载是个难题。我曾看到过关于intel的多核CPU负载情况和AMD的多核CPU负载情况对比(来自AMD的宣传展会视频,不排除黑幕),intel的多核CPU均匀负载做的比较烂,AMD的好得多。那么多核CPU的均匀负载谁来做?废话,当然是CPU厂家!
如果要在游戏编程的层面上做多线程/进程优化,第一步就是抛弃市面上几乎全部游戏开发软件,自己从头开始。所以在谈思路前,先学好编程,着手编写或彻底学习一些函数库,然后编写一大堆调用素材的函数,准备一大堆素材,确保你能完全把握你的程序,然后再提多线程/进程的事。
至于win10的均匀负载的新特性,你要是能在日常使用中看出来,你会被邀请去各大芯片厂家当高级工程师,各类开设计算机专业的大学都会以你去讲课为荣。这话一点都不夸张。
至于win10这部分优化到底在哪儿,我估计微软自己的工程师都搞不清楚,真的,windows现在的代码量是上千万行,没人能看得完,何况还有各种CPU的手册。在专业且具体的测试结果出来前,你当它是句宣传语就得了。
和谐小小 1年前
龙骑士无面者 [作者] 1年前
和谐小小 1年前
和谐小小 1年前
发布
淡观天下 1年前
线程数看不到?
看了你的评论,我觉得我在一家假公司从事着假工作生活在一个假世界用着假计算机。我的图片呢····
龙骑士无面者 [作者] 1年前
淡观天下 1年前
发布
霜骑士 1年前
发布