Pergunta

Alguém sabe o destino da Global Interpreter Bloqueio em Python 3.1 contra C ++ multithreading integração

Foi útil?

Solução

GIL ainda está lá em CPython 3.1; andorinha Unladen projetos objetivos (entre muitos outros aumentos de performance) para eventualmente removê-lo, mas ainda é um caminho de seus objetivos, e está trabalhando em 2.6 pela primeira vez com a intenção de, eventualmente, portar para 3.x para qualquer x será atual no momento em que a versão 2.y é considerada a ser feito. Por enquanto, o multiprocessamento (em vez de enfiar) continua a ser a forma de escolha para a utilização de múltiplos núcleos em CPython (IronPython e Jython são bons também, mas eles não suportam Python 3, atualmente, nem fazem integração C ++ tão fácil qualquer um; - ).

Outras dicas

Mudanças significativas ocorrerão no GIL para Python 3.2. Dê uma olhada na Novidades para Python 3.2 , e o segmento que iniciou-lo na lista de discussão .

Enquanto as mudanças não significam o fim do GIL, eles arauto potencialmente enormes ganhos de desempenho.

Update0

Esforços têm sido feitos nos últimos 15 anos para remover o GIL de CPython, mas para o futuro próximo ele está aqui para estadia.

A GIL não irá afectar o seu código que não usa objetos python. Em Numpy, nós liberamos o GIL para o código computacional (linear álgebra chamadas, etc ...), e o código subjacente pode usar multithreading livremente (na verdade, esses são bibliotecas geral 3o partido que não sabem nada sobre python)

O GIL é uma coisa boa.

Basta fazer a sua aplicação C ++ liberar o GIL enquanto ele está fazendo o seu trabalho de vários segmentos. código Python continuará a ser executado em outros tópicos, intocada. Apenas adquirir o GIL quando você tem que tocar objetos python.

Eu acho que sempre haverá uma GIL. O motivo é o desempenho. Fazendo todo o segmento seguro baixo nível de acesso - significa colocar um mutex ao redor de cada operação de hash etc. é pesado. Lembre-se que uma simples declaração como

self.foo(self.bar, 3, val)

já poderia ter, pelo menos, 3 (se val é uma organização global) pesquisas hashtable no momento e talvez até muito mais se o cache método não é quente (dependendo da profundidade herança da classe)

É caro -. É por isso que Java abandonou a idéia e hashtables introduzidas que não usar uma chamada de monitor para se livrar de sua "Java é lento" marca

Pelo que entendi o programador "brainfuck" irá substituir o GIL de python 3.2

BFS bainfuck programador

Se o GIL está ficando no caminho, basta usar o multiprocessamento módulo . Ele gera novos processos, mas usa o modelo de segmentação e (a maioria do) api. Em outras palavras, você pode fazer o paralelismo baseado em processos em um fio-like forma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top