首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于并发性而言,无堆栈蟒蛇的速度有多快?

对于并发性而言,无堆栈蟒蛇的速度有多快?
EN

Stack Overflow用户
提问于 2009-12-06 03:48:23
回答 2查看 1.7K关注 0票数 2

没有堆栈的python并没有很好地使用多核,那么它应该比python线程/多处理更快的地方是什么呢?

所有的基准测试都使用无堆栈的python tasklet与python线程锁和队列进行比较,这是不公平的,因为锁的效率总是很低。

要知道,如果使用不带锁的单线程函数调用,它应该与无堆栈python一样高效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-06 04:17:41

首先关注功能,其次关注性能(除非你知道自己有需要)。

在服务器上的大部分时间都是与I/O一起使用的,因此多核对此没有多大帮助。如果您正在使用的是(主要是 I/O ),那么多线程python可能是最简单的答案。

如果服务器请求是CPU密集型的,那么有一个父进程(不管是多线程的还是非多线程的),以及相应的子进程确实有很好的意义。

如果你真的想扩展,你可以看一个不同的平台,比如Erlang。如果您真的想扩展并且仍然使用python,那么您可以使用Python进程作为分布式集群上的erlang端口来查看分布式Erlang。

有很多选择,但除非您正在处理某个,否则您很可能会采取一种简单的方法。

提前发布,经常发布.

票数 2
EN

Stack Overflow用户

发布于 2010-11-19 06:39:24

有一个新的和流行的东西叫做异步IO循环和消息传递并发和其他一些流行术语。嗯,这根本不是什么新鲜事,只是最近五年才被主流所发现。

Stackless Python是Python的一个版本,它对VM本身进行了修改,以更好地支持这些消息传递和IO循环,其诀窍是绿色线程/协同。

还有其他库可以在Python上使用不同的工具(例如Twisted和旋风)来进行相同的操作。您甚至可以在Stackless Python上运行混合Twisted,等等。

IO循环位直接映射到Berkley套接字是如何进行异步IO的,只需付出一点努力就可以将其扩展为主动(而不是反应性),并与文件系统和网络套接字(例如最新的libevent )一起工作。

横向地使用多个核心是有两种方法的--多线程;共享状态(例如线程或进程之间)--多处理(例如消息队列)。当前体系结构的一个普遍限制是,线程方法在本地对大量核心很好地工作,而消息传递随着内核数量的增加或这些核心位于不同的机器上,在性能上超过了性能。你可以采取一种混合的方法。

由于Python中的内部设计选择,它在多线程方面的效率通常不如多线程处理,因此您使用消息传递的多个进程比在其他平台上更快。

但是通常情况下,消息传递方法是一个更干净、容易更正的版本。

还有其他语言在这种方法的基础上构建了不同的附加目标和约束,例如Erlang、node.js、Clojure、Go。

在这些信息中,Clojure可能是信息最丰富的。当你理解了法律上的滴答声,并思考了为什么,其他系统的整体目标和约束就会到位.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1854278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档