Python的无堆栈可以快速并发?
-
13-09-2019 - |
题
无堆栈蟒没有采取多核的良好的使用,所以在那里是它应该比蟒螺纹/多快的点?
所有的基准使用无堆叠蟒微进程与蟒螺纹锁和队列比较,这是不公平的,原因锁总是具有效率低
看到的,如果使用单个线程函数调用的不锁定它应尽可能无堆栈蟒一样有效
解决方案
专注于功能性第一和性能第二(除非你知道你有需要)。的
大多数的服务器上的时间都花在与I / O,因此多核心并不能帮助这么多。如果是大多 I / O,你正在使用,多线程蟒蛇可能是最简单的答案。
如果服务器请求与CPU密集型的,然后将具有一个父进程(可以是多线程的或不),和各自的子进程确实使感好位。
如果你真的想向规模化,你可以看看在不同的平台上,像二郎。如果你真的想和规模仍然使用Python,你可以看看与作为二郎口管理的分布式集群上的Python程序分布式Erlang的。
选项很多,但除非你正在处理成才的大大方方后,你可以极有可能采取简单的方法。
<强>释放早期,释放常常强>
其他提示
有此是称为异步-IO-循环和消息传递并发和其他一些时髦术语新和时髦的事情。那么,它不是在所有新的,但它仅仅只有这些过去5年的主流被发现。
无堆栈Python是Python中的一个版本,其中VM自身已经修改以更好地支持这些消息传递和IO循环和其诀窍是绿色穿线/协程。
有其他库做同样使用不同的工具,例如扭曲和龙卷风,关于Python。甚至可以运行混合扭上Stackless的Python和等。
在IO环位直接映射到如何Berkeley套接字做异步IO,并用一个比特的努力可以扩展到是主动而非被动和与文件系统以及网络套接字,例如工作最新的libevent。
要缩放侧身利用多于一个的核心是,你必须两种方法 - 多线程;共享状态例如线程或进程间 - 多例如消息队列。它是当前架构的一般限制,即线程方法适用于大量的内核本地,而消息传递超越的性能代价为内核的数量变得庞大,或者如果这些内核是不同的机器上。你可以做一个混合的方法。
由于在Python VM内的设计选择的,所以一般不在多线程的多处理一样高效,所以你去与消息多个进程传递早于你可能在其他平台上。
但是通常传递方式的消息是一个清洁器,容易地校正版本。
和有构建于与不同的附加的目标和约束条件例如同样的方法其他语言二郎,node.js中,Clojure中,去
其中,Clojure是也许是最丰富。当你明白的Clojure如何蜱,并认为通过的个为什么的,整体目标和其他系统的制约将水到渠成......