Python,Java,C#和并行算法

问题描述

| 我想知道:尝试在Python中创建并行算法有什么好处吗?假设我想研究一种新的并行算法,并且我可以选择C,C#和Python,其中一个或另一个“更好”地测试和基准化这些算法,或者它们只是“功能等效”并且,除了与解释/编译/ vm语言关联的常量之外,它们是否都相同?谢谢     

解决方法

        由于全局解释器锁(GIL),Python不适合此操作,它不能以这种方式工作。 C在多线程环境中很难使用,但是有另一种选择-Cilk语言。 C#是并行编程的不错选择。您可以使用.NET Framework 4中的任务并行库,并发数据结构和PLINQ。     ,        C有很多替代方案,但这是一种底层语言。我听说英特尔的线程构建模块是一个基于Cilk的商业并行库,很好。 这取决于您要为Python做什么。虽然您可以使用预先编译的Python变体Cython避开GIL,但Cython的编译速度很慢,并且失去了平台独立性。另外,Python是一种脚本语言,因此您通常希望在并行化之前切换到更快的语言。话虽这么说,使用Python中的“ 0”模块(可以避开GIL),您可以编写一些简单的并行代码。 Java可能是最好的选择。关键字``1''以及不错的基元(例如线程安全的非阻塞队列)使其相对令人满意。尽管Java很老,所以您比Python浪费更多的时间编写冗长的代码。 我正在(逐步)在Haskell中学习并行性。高效运行似乎不是最容易的事情,但是如果您的任务相当并行,那么它似乎可以很好地工作。而且,当然,Haskell的表现力令人难以置信(在语法上完全不同之后-出于充分的理由恕我直言,这是不正确的),并且由于它的功能,您不会遇到奇怪的国家腐败问题;最坏的情况是您的代码无法扩展。有各种各样的库,例如STM(软件事务存储),从理论上讲,它们似乎比命令式程序员使用的原语(例如锁)要好得多(理论上)。     ,        我将最终使用Python,因为编写Python程序既快速又容易,并且因为它可能已经包含了您需要的所有工具。它使您可以专注于算法,而无需处理语法和声明。 对于基准测试,可以使用cProfile或timeit模块。 您要测试哪种并行算法?有许多方法可以进行并行编程。对于需要扩展到许多流程的算法,最简单的方法可能是使用MPI。 mpi4py是Python的一个很好的实现,如果需要处理数字数组,则与numpy紧密集成。 如前所述,由于GIL,多线程只能使用1个处理器。但是此限制仅适用于这种情况。您可以在所需的多个处理器上使用多处理。 最后,Python中提供了用于函数式编程的工具。协程对于并发编程可能非常有用。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...