1
keakon 2011-11-01 20:57:35 +08:00
上限就是你的内存……
另外,因为存在GIL,所以Python的多线程只能用于避免IO的等待,无法利用多核CPU的优势 |
3
kojp OP |
5
myrual 2011-11-02 09:06:24 +08:00
@kojp 非要榨干多核的cpu的能力的话,可能要看看支持并行计算的语言,也许函数式的语言可以满足需求,如果线程必须依赖io来进行的话,可能提升的空间有限吧。
|
10
alsotang 2011-11-03 22:32:51 +08:00
投票程序一般都是IO上限,所以没必要去利用多核的优势。你的程序的效率瓶颈在于网络速度,而不是CPU的处理速度。
我认为楼主的程序开10个程序每个10线程,与1个程序100线程的效率是几乎一致的。 |
11
kojp OP @alsotang
呃,经测试。效率完全是有差别的。。。(也可能是我程序里面没处理好) 我在程序里面开5个线程,和开10个线程。。以及开20个线程。。。是承一定的规律往下递减的。 比如说 10个===》100票 20个====>180票。。。50个=====》350票(大概是这么个规律,数据不够准确) 但是,我要把10个线程的程序同时开上5个的话。。。却基本上是平均的。 5*100=500票 |
12
SkyFvcker 2011-11-12 17:08:44 +08:00
都是GIL惹得,高并发用Erlang,或者用多进程库。在*nix里多进程通信代价是很低的
|
13
dreamersdw 2011-11-12 18:09:46 +08:00
Linux 下
查看线程数限制 cat /proc/kernel/sys/threads-max,我这里是 62274 查看进程数限制 cat /proc/kernel/sys/pid-max。我这里是 32768 non-blocking socket 程序通常是简单的,但代价是不得不为每一个 socket 启用单独的线程或进程。如为效率着想可以使用 epoll + non-blocking socket http://scotdoyle.com/python-epoll-howto.html,并且 Python 下还有 Twisted 框架简化这类编程问题 http://twistedmatrix.com/trac/ |
14
kojp OP |
15
est 2011-11-13 17:57:43 +08:00
@dreamersdw twisted当真是用来“简化”的?
|
16
dreamersdw 2011-11-14 08:53:30 +08:00
@kojp OMG, 写反了,应当是 cat /proc/sys/kernel/threads-max
|