- 主题:大牛来说说,py3.14的no-GIL对实际应用有什么用途?
对比 multiprocessing 的版本呢?
【 在 poocp 的大作中提到: 】
: 线程数增加,差距继续拉大。
: (test314) PS Z:\py> python3.14t.exe .\ng.py 5
: 5 线程(noGIL) 耗时 0.64s 结果 170666663466666680000000
: ...................
--
FROM 110.87.26.*
现实的 Python 程序都是调用 Pool.map(),
不需要考虑多进程的创建开销。
【 在 poocp 的大作中提到: 】
: 多进程的创建开销太高了,完全不需要比。
--
FROM 110.87.26.*
不太懂你们是什么应用场景。
我这边跑并行的时候,一般都是些并行压缩、转换图片、JSON 序列化处理这一类的活。进程内跑的时间比较长。创建进程的开销占比很小。
【 在 poocp 的大作中提到: 】
: 只是把创建开销移到启动时开销了而已,总的执行时长又没节省。
--
FROM 110.87.26.*
我弄的那些也算计算密集型的。
IO 密集我一般用的 gevent 搞定。
【 在 poocp 的大作中提到: 】
: 这个自由线程功能主要用途是跑满CPU所有核心,适合计算密集型应用。对IO密集型的应用没啥提升。
--
FROM 110.87.26.*
“有个 dict 需要有多任务间修改”,这件事情在我看来就是错误啊。
设计并行程序需要从框架上抽象成 map/reduce 或者生产者/消费者。
我不管用进程、线程和协程,都不会直接调用这三者的基础设施。
【 在 RunningOn 的大作中提到: 】
: 进程间共享数据非常麻烦,很多场景下为了多进程需要大改数据结构甚至程序结构。
: 比如你有个dict需要在多任务间修改,多线程的话加个lock就解决,多进程的话就得加进程
: 间通信,不论是socket、共享内存、进程安全queue,都很麻烦。当共享的数据多起来时,就是灾难,不得不重新设计程序结构。
: ...................
--
FROM 110.87.26.*