Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在c++;不';T 我编写了一个简单的程序(用Caltz猜想计算数字1-10 ^ 10的步骤数)在Python和C++中。它们几乎完全相同,而且都不是为多线程编写的。我用python运行了一个,根据我的系统经理的说法,一个内核直接达到了100%的使用率,其他的保持不变。我运行C++程序,内核在10到15%个使用状态之间保持相同的波动,从未真正改变。他们两人几乎在同一时间完成了这项工作,仅用了几秒钟。有人能给我解释一下为什么会发生这种情况吗?_C++_Python_Multithreading - Fatal编程技术网

Python在c++;不';T 我编写了一个简单的程序(用Caltz猜想计算数字1-10 ^ 10的步骤数)在Python和C++中。它们几乎完全相同,而且都不是为多线程编写的。我用python运行了一个,根据我的系统经理的说法,一个内核直接达到了100%的使用率,其他的保持不变。我运行C++程序,内核在10到15%个使用状态之间保持相同的波动,从未真正改变。他们两人几乎在同一时间完成了这项工作,仅用了几秒钟。有人能给我解释一下为什么会发生这种情况吗?

Python在c++;不';T 我编写了一个简单的程序(用Caltz猜想计算数字1-10 ^ 10的步骤数)在Python和C++中。它们几乎完全相同,而且都不是为多线程编写的。我用python运行了一个,根据我的系统经理的说法,一个内核直接达到了100%的使用率,其他的保持不变。我运行C++程序,内核在10到15%个使用状态之间保持相同的波动,从未真正改变。他们两人几乎在同一时间完成了这项工作,仅用了几秒钟。有人能给我解释一下为什么会发生这种情况吗?,c++,python,multithreading,C++,Python,Multithreading,一般来说,Python处理原始数字的速度非常慢。这是因为它将其完整、通用的对象模型用于所有对象,包括数字。你可以将它与Java和C++进行对比,java和C++有“原生类型”,它们不提供真实类(方法、继承、数据属性等)的任何细微之处,但提供对底层CPU原始速度的访问。 在Python中,代码> x= a+b通常在运行时要比在 x= a+b中要做的工作少得多,尽管语法基本上相同。Python的统一对象模型是使其相对容易使用的因素之一,但它在原始速度方面可能有缺点 有多种替代方法可以恢复损失的速度:

一般来说,Python处理原始数字的速度非常慢。这是因为它将其完整、通用的对象模型用于所有对象,包括数字。你可以将它与Java和C++进行对比,java和C++有“原生类型”,它们不提供真实类(方法、继承、数据属性等)的任何细微之处,但提供对底层CPU原始速度的访问。 在Python中,代码> x= a+b通常在运行时要比在<代码> x= a+b中要做的工作少得多,尽管语法基本上相同。Python的统一对象模型是使其相对容易使用的因素之一,但它在原始速度方面可能有缺点

有多种替代方法可以恢复损失的速度:

  • 使用一个自定义的C扩展来返回原始CPU计算,并直接恢复速度
  • 使用现有的数字库执行相同的操作
  • 使用即时编译器(例如,通过psyco项目或PyPy)
  • 使用
    multiprocessing
    concurrent.futures
    利用多核,甚至使用分布式计算库利用多台机器

另外,在描述了算法之后,这是一个更好的问题:)

一般来说,Python在处理原始数字时非常慢。这是因为它将其完整、通用的对象模型用于所有对象,包括数字。你可以将它与Java和C++进行对比,java和C++有“原生类型”,它们不提供真实类(方法、继承、数据属性等)的任何细微之处,但提供对底层CPU原始速度的访问。 在Python中,代码> x= a+b通常在运行时要比在<代码> x= a+b中要做的工作少得多,尽管语法基本上相同。Python的统一对象模型是使其相对容易使用的因素之一,但它在原始速度方面可能有缺点

有多种替代方法可以恢复损失的速度:

  • 使用一个自定义的C扩展来返回原始CPU计算,并直接恢复速度
  • 使用现有的数字库执行相同的操作
  • 使用即时编译器(例如,通过psyco项目或PyPy)
  • 使用
    multiprocessing
    concurrent.futures
    利用多核,甚至使用分布式计算库利用多台机器

另外,在描述了算法之后,这是一个更好的问题:)

如果没有任何关于您的简单程序正在做什么的细节,您将不会得到任何东西,除了胡乱猜测。对于许多CPU受限的程序来说,这是非常预期的结果。那么这是正常的吗?我以前从未见过这种情况。如果没有充分的准备,很难回答这个问题。你能给出一小段代码来重现这个问题吗,你的编译器版本和编译器标志?在我的经验中,在紧密循环中的C++程序往往比其他任何东西都更依赖于我的CPU,但是可能你无意中使程序IO被绑定了。除了胡乱猜测之外,你什么也得不到。对于很多CPU受限的程序来说,结果都是非常令人期待的。那么这是正常的吗?我以前从未见过这种情况。如果没有充分的准备,很难回答这个问题。你能给出一小段代码来重现这个问题吗,你的编译器版本和编译器标志?根据我的经验,在紧密循环中的C++程序往往比其他任何东西都更能使我的CPU保持固定状态,但是可能你无意中使程序IO被绑定了。根据MMG对问题的评论,我的回答是假设程序正在向控制台写入足够的数据,使C++版本变成IO绑定,而Python版本是CPU绑定的。如果不是这样的话,肯定还有别的事情发生。根据MMG对这个问题的评论,我的回答是假设程序正在向控制台写入足够的数据,使C++版本变成IO绑定,而Python版本是CPU绑定的。如果不是这样的话,肯定还有别的事情发生。