【发布时间】:2020-01-03 15:06:59
【问题描述】:
所以这是一个纯粹的假设问题。我必须首先提出一个免责声明:我实际上不知道处理器如何在低级别甚至高级别上工作,但是感谢低级别和高级解释,因为我仍然可以围绕答案(可能要花我几个小时)。
所以问题是:为什么会有软件不能利用多核或多线程? 或者更好的措辞,为什么必须在软件中编码多线程支持,而不考虑代码,处理器会自动分配给它的所有内核吗?
我非常天真的看待它的方式是,软件会向 CPU 请求一些计算,那么为什么 CPU 不能有一个“主线程”,它除了将计算分配给其他每个线程之外什么都不做,然后将结果转发回软件?
因为我知道很多软件一次只能使用一个内核,并且根据我对 CPU 工作原理的天真理解,不应该有理由阻止它仅将计算发送到所有可用内核。
关于这一点,主要问题:是否有可能创建一个软件(或驱动程序),使任何软件都可以使用所有可用的内核,而不管它是如何编码的?
【问题讨论】:
-
我相信不是。如果可能的话,我们今天会有这样的软件。 ;) 为该用例设计和编写了一个使用多个内核的程序。即使有可能,创建这样的软件也没有任何意义,因为在线程之间切换会耗费时间并因此而耗费性能。因此,如果单线程或多线程解决方案的性能更好或更差,则必须在每种情况下对其进行分析。
-
程序中使用的算法与您在厨房中使用的食谱相比非常好。绝大多数描述了必须按顺序执行的顺序步骤。不这样做会使厨房变得一团糟,就像它会使程序变得一团糟一样,你不能在将面粉放入碗中的同时打破鸡蛋。然而,两名厨师通常可以同时制作两份不同的饭菜,只要他们协商使用烤箱即可。或者在他们之间分担主菜和甜点的工作。这也是编程中使用的实际并行性。
标签: multithreading cpu core