我现在主要用python编写,但是我正在寻找一种更加线程友好的语言(不是JAVA,C#,C或C ++)。
Python的线程在IO绑定时是很好的,但是当我在做CPU密集型操作时它会变短。
有什么想法吗?
谢谢, 詹姆斯
答案 0 :(得分:7)
Clojure非常有趣,如果你喜欢这样的话。它是在JVM上运行的lisp。显然,尽管是动态类型*,它对于很多事情来说都和Java一样快。 Java互操作就像我想象的那样方便,虽然本机的clojure库已经足够好了,你不需要在大多数事情上都能使用Java。
它还增加了一些“脚本语言”感觉,如地图( - > Python dicts)和矢量( - > Python列表),以帮助减少括号发作的可能性。
哦,对,并发。它使用软件事务存储系统,这本身就很有趣。 Extra, extra: Read all about it
*:我认为您可能需要使用“类型提示”来获得许多任务的类似Java的速度。这在Clojure中非常方便。
答案 1 :(得分:4)
在其他任何事情之前,您试图解决哪些编程问题? GIL实际上已成为瓶颈吗? (如果你不确定,可能没有。)
如果不知道这一点,你就有可能寻找适合你锤子的钉子,而不是相反。
如果你真的,真的知道GIL已成为瓶颈,并且你需要在多个处理器上处理数字,那么你要考虑:
multiprocessing
模块。这为您提供了与threading
大致相同的API和优势,但为您提供了真正的进程级并发:除此之外,这使您可以轻松地在多个CPU上运行CPU密集型代码一致的机器,如果你的问题实际上变得很大,这是至关重要的。答案 2 :(得分:3)
boo的语法是受Python启发的。但是编程语言有点不同:它是强类型的类型推理,它最重要的特征可能是开放的编译器管道,即创建语法宏的能力(在LISP意义上的“宏”一词,而不是在C语言中的“预处理器宏”)。
显然,IronPyton非常pythonic,并且与其他.NET语言一样擅长线程化。
答案 3 :(得分:2)
EVE online是一个增强版 Python编程的版本 语言。它允许程序员 获得基于线程的好处 编程没有性能 和复杂性相关的问题 与传统的线程。该 Stackless增加的微线程 Python便宜又轻巧 方便,如果使用得当, 不仅可以作为一种方式 构建应用程序或框架, 但通过这样做改进计划 结构和便于阅读 代码。
答案 4 :(得分:1)
要克服GIL,你可以尝试用jython而不是cpython来解释python语言
答案 5 :(得分:1)
Python涉及到CPU密集型任务,因为Python不是一种非常有效的语言。许多“动态”语言都有这个问题,因为编译器在编译时对程序的假设是有限的。例如,方法调用可能必须每次都被查找,以防有人在每次调用之间替换对象上的方法。
我建议你看一下Erlang,尽管你的意思可能不是“Pythonic”。 : - )
答案 6 :(得分:1)
接受提示。 CPU密集型程序也可以制作成多个进程。多个流程和传递状态的管道通常具有出色的性能。
不要随意捕捉其他语言,而是这样做。
将问题分解为可以同时执行的步骤流程。
在shell中,顶级脚本是:a.py | b.py | c.py | d.py
...
将每个步骤写成一个非常小的Python循环,从sys.stdin
读取并写入sys.stdout
。有趣的是,这是raw_input()
和print()
的默认设置。
衡量表现。
你 - 正确 - 花费你所有的时间来设计你的算法。你将花很少的时间编写或学习一门新语言。您可以轻松地在每个可用CPU上占用每个核心。你将花时间在线程同步或其他愚蠢上。
对于“CPU密集型”应用程序来说,这种方式非常有效。
答案 7 :(得分:1)
您可以使用python multiprocessing它镜像线程的API,但运行单独的进程。可能不适用于非posix。对于一般的CPU密集型问题,您可以随时尝试Stackless Python(已提及)或Pyrex。