我一直在使用Python的Global Interpreter Lock进行性能问题。我不得不做一些线程安全的事情 - 尽管有共同的建议,GIL不会自动保证线程安全 - 但我有一个程序通常运行10个线程,其中所有线程都可以在任何时候处于活动状态时间,包括在一起。这是一个有点复杂的异步消息传递系统。线程和Python的Global Interpreter Lock没有性能问题。可扩展性?
我明白多处理,甚至在这个程序中使用Celery,但解决方案将不得不非常复杂的工作,通过多处理这个问题集。
我正在运行2.7并使用递归锁尽管他们的性能处罚。
我的问题是这样的:我会遇到与GIL缩放问题?到目前为止,我没有看到性能问题。衡量这是......有问题的。是否有一些线程或类似的东西,你打了,它只是开始窒息? GIL性能与在单核CPU上执行多线程代码有很大不同吗?
谢谢!
没有人在他们的正确思想中会说GIL保证线程安全。它的存在是为了保护解释器的内部,所以你不会真正崩溃,巧合地使一些类型的操作(用C实现,在单字节代码指令中完成所有依赖状态的工作)原子。但是它不能使'x + = 1'在两个不同的线程中安全地运行,因为其中的字节代码涉及加载'x',加一个,并存回''x'',并且解释器可以交换GIL在之间的任何一步。 GIL不是为了逻辑安全,而是为了解释者的完整性;其余的使用锁。 – ShadowRanger