[python] sockety - problem s HTTP spojenim

superman feed na centrum.cz
Středa Listopad 28 21:42:16 CET 2007


> No, mohl bych poprosit o referenci na nejaky zdroj, ktery tvrdi, ze od
> zacatku provadeni vyrazu "buffer += foo" az po jeho dokonceni se
> nedostane ke slovu jiny thread?

Ne, tato operace rozhodně atomická není a ani být nemůže. To, že tam 
jsou immutable stringy situace dost zlepšuje, nicméně o atomičnosti 
operace nemůže být ani řeči.

> Vzhledem k tomu, ze se celkem bezne [1] tvrdi, ze += 1 na int *neni*
> atomicke, tak soudim, ze append na (immutable) stringy rovnez nebude.

Pokud je vykonávána operace (int) += 1, pak tato instrukce v rámci 
strojového kódu atomická být samozřejmě může. Přímo assembler většiny 
procesorů umožňuje tuto operaci vykonat atomicky.

Druhá otázka je, zda a jak tuto instrukci vykonává Python, a zda možnost 
atomičnosti této operaci podporované dokonce přímo na úrovni procesoru 
využije, nebo hodí do kopru.

Jinak atomickou incrementaci int podporují i operační systémy (například 
na Windows funkce InterlockedIncrement()), nebo základní knihovny mnoha 
překladačů (třeba funkce __atomic_inc() v gcc). Takže zde jen záleží na 
interpreteru Pythonu, zda využije této možnosti.

>>3) vzhledem k pythonímu GIL je vše (mnohdy až příliš) thread-safe a pokud
>>   nepoužíváte nějaké neobvyklé C extenze, nemusíte zamykat skoro nic
> 
> Silne nesouhlasim, viz znovu [1]. Dalsi vygoogleny odkaz je thread [2].

Ač jsem nečetl nic a dokonce se přiznávám, že vůbec netuším, co je to 
GIL - jako člověk, který napsat fůru multithreadových aplikací toto 
sebevědomí mi říká, že autor o thread safe programování moc neví.

Dokonalé zajištění thread safe je VELMI DRAHÁ záležitost, pro kterou 
musíte obětovat velmi mnoho rychlosti a efektivity programu, pokud jí 
chcete zajistit naprosto obecně. Z těchto důvodů dokonalé thread safe 
věci NEEXISTUJÍ (vynechám-li triviální věci a triviální problémy). Vždy 
je potřeba udělat ústupky, má-li to vůbec být použitelné. V opačném 
případě je to nepoužitelné a velmi náchylné k deadlockům.

Miloslav Ponkrác



Další informace o konferenci Python