多线程共享全局变量,多个进程不能共享全局变量,因为每个进程都有独立的内存地址。在中间人的帮助下,这个中间人一般是消息队列或者python内置的多进程通信队列。
python多线程效率不高,因为有gil锁,执行不能并发。
一个被排除,留下异步比较多进程。哪一个是高效的,主要取决于它是否是一个计算密集型任务,以及进程之间的通信有多频繁。
请记住,单个进程是异步的,只有一个内核在满负荷工作,多个进程可以利用多个内核的功能。
最后,多进程和异步可以混合,这种结构有点类似于go,可能是最高效的组合。
gil,这把大锁的存在是有原因的。首先,我们知道python是一种解释语言,代码执行是在解释器中进行的。解释性语言有一个共同的问题。;无法实现真正的多线程并发。这是先天性的。多个线程共享主进程的资源。如果你不t锁死线程,让它们并发,多线程修改共享数据,会导致数据混乱,不靠谱。因为翻译者不。;我不知道你在代码的什么地方修改了共享数据,它直接锁定了线程。解释器一次只允许一个线程运行。
当然,你可能会说,我我只是要求解释器锁定要修改的共享数据,这样多线程才能真正并行。其实国外老板早就这么干了。测试的结果是,执行效率不如直接锁线程。到目前为止,python开发团队还没有针对这个问题提出更好的解决方案。这是解释性语言中的一个常见问题。另外,解决这个问题在技术上也有难度。
虽然gil这个大锁的存在影响了多线程,不能真正并发,但是我们可以用多个进程来解决。
上次在stackoverflow上看到有人讨论,简短的回答是太难改了...因为要考虑的问题太多了。
。
至于要考虑的问题,我不知道。;我不太了解这些技术,我想你也不知道。;t也没有,所以我不会不要列举它们。
首先,python的性能和其他语言相比真的不高。
第二,如果你在python中使用了线程,我想你应该对这个地方为什么使用线程有非常深刻的理解。
第三,流程的效率也不错。可以满足日常用胶需求。
全球锁是一个历史问题。无论如何,魔变中的社群会有一定程度的提升。在这个阶段,它足够作为胶水和快速业务代码。当你需要考虑更高的性能时,可以考虑换一个。重写业务代码也很快。