
1 muzuiget Jul 4, 2021 WebWorkers 本身就是进程,你用再起一个 Python 不也是一样。 |
3 muzuiget Jul 4, 2021 WebWorkers 之间通信也是要序列化对象,而不是共享内存,所以它用起来就是个“进程”。 |
4 TypeError Jul 4, 2021 via Android Concurrent.futures processpoolexecutor |
5 learningman Jul 4, 2021 via Android @muzuiget 可以共享内存的,SharedMemoryBuffer 吧好像是这个。把指针传过去就行了。 |
6 tkmiles Jul 4, 2021 当你纠结于 GIL 同时不知道怎么规避它或者规避它的开销不可容忍的时候, 这个时候你已经不需要 python 了 |
7 lesismal Jul 4, 2021 出门左转,golang 欢迎你 |
8 ipwx Jul 4, 2021 |
9 learningman Jul 4, 2021 via Android @ipwx 我说 js 你发个 python 的文档给我干啥。。。 |
10 tabris17 Jul 4, 2021 via iPhone gil 警告,py 多进程也凑合用吧 |
11 matrix67 Jul 4, 2021 CPU 密集型操作不要选择用 python |
12 zeroDev Jul 4, 2021 via Android 用进程和协程 |
13 abersheeran Jul 4, 2021 @learningman 他的意思是 Python 多进程也可以共享内存。 对于这种脚本语言来说,共享内存里的对象和共享内存,差别还是蛮大的。你能直接从共享内存里处理一个巨复杂的对象吗?好像比较难吧。不像 C,整个内存排布都是固定的,想怎么玩就怎么玩。 |
15 Sasasu Jul 4, 2021 你把 python 想象成巨大配置文件,用来描述一个数据流的过程发给 C++,然后 C++ 去跑。这是 "处理 CPU 密集型操作" 的标准流程。 |
16 wwqgtxx Jul 4, 2021 @abersheeran 巨复杂的对象直接用 multiprocessing.Manager 不就得了 |
17 XiaoxiaoPu Jul 4, 2021 @wwqgtxx 能存放复杂对象的 Manager 是基于进程间通信的;使用共享内存的 Manager 只支持固定大小的简单类型数组 |
18 abersheeran Jul 4, 2021 @wwqgtxx 你要是真用过,你就会发现这玩意疯狂上锁,据我的测试,Manager 所在进程跑到 100%,其他进程只有 45% 的样子。一核有难,七核围观。 |
20 wwqgtxx Jul 4, 2021 @abersheeran Manager 疯狂上锁倒是真的,以前在做工程的时候还遇到过 Manager 内部线程泄露的问题,最后自己魔改了 Manager 的源码才解决的问题。Manager 所在进程跑到 100%的原因还是因为所有的该对象的抽中是在 Manager 所在进程操作的,其他进程只是调用,自然 CPU 占用低 @XiaoxiaoPu 目前也没有语言能实现动态大小的复杂对象基于共享内存吧,使用 RPC 调用方式基本上是最简单的实现方式了 |
22 yolee599 Jul 5, 2021 via Android 你需要的不是 python,而是一个支持线程的编程语言 |
24 no1xsyzy Jul 5, 2021 |
26 James369 OP @yolee599 #22 Python 本身很好用,灵活快速,第三方库又多,又简单易上手。但是就是有这个小缺陷。 相反,别的语言都在不断的进化。比如 C++,加了很多现代特性,什么右值转移、auto 类型推导、lambda 编程、async 异步编程等等。 我觉得 C++还可以再活 100 年。 |
27 hunk Jul 5, 2021 via iPhone 为了多线程,果断换用 go,协程眨眼间完事 |
28 Rwing Jul 5, 2021 c#欢迎你,另外 python 不是也有 async/await 吗? |