<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2016-05-25 17:07 GMT+01:00 alessandro medici <span dir="ltr"><<a href="mailto:alexxandro.medici@gmail.com" target="_blank">alexxandro.medici@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br></blockquote></span><div>Come al solito, passeggiare per la libreria porta spesso a dei bei risultati:</div><div> <a href="https://docs.python.org/3.5/c-api/memory.html" target="_blank">https://docs.python.org/3.5/c-api/memory.html</a></div><div>spiega anche bene come si potrebbe fare.</div><span class=""><div><br></div></span></div></div></div></blockquote><div><br></div><div>A me sembra proprio di no. </div><div><br></div><div>Scusa... parliamoci chiaro. Diciamo che hai scritto un allocatore che lavora su un chunk di memoria condivisa. </div><div>Che vuole anche dire condivisa fra piu' processi (se no non e' particolarmente interessante).</div><div><br></div><div>Mi spieghi come hai intenzione di fare si che tutto questo non si rompa male *senza* usare lock?</div><div>Che ok... alcune cose possono essere fatte con CAS (tipo i reference counters); ma, come dicevo, CAS funziona bene quando hai poche scritture e tante letture. Mentre qui hai un numero relativamente bilanciato delle due cose. E comunque questo vorrebbe dire anche cambiare l'implementazione di Object (IIRC non usa roba CAS). Ma le altre? </div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
>> In Go puoi usare i channel, ma anche qui alla fine usi la memoria<br>
>> condivisa, solo che la sincronizzazione è gestita dal runtime.<br>
>> Ma sempre in Go, spesso la soluzione più semplice e suggerita in<br>
>> mailing list, è quella di usare un mutex.<br>
><br>
><br>
> Funziona davvero (in C) per riscrivere spesso, ma inutile se quel che ti<br>
> serve (in Python) è lavorare su<br>
> troppi dati eguali che cambiano ogni tanto :-(  e vanno riletti spesso.<br></blockquote><div><br></div></span><div>Sembrerebbe anche qui:</div><div><a href="https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing.sharedctypes" target="_blank">https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing.sharedctypes</a></div><div><br></div><div>Che era, in effetti, quel che cercavo.</div></div></div></div></blockquote><div><br></div><div>Io continuo a credere che tu stia ficcandoti da solo in un bagno di sangue.</div><div>Perche' sei convinto che la memoria condivisa ti *serva*?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Di passaggio vedo che pickle è usato solo per Queue in code FIFO ma che</div><div>la Pipe sottostante non la usa.</div></div></div></div></blockquote><div><br></div><div>Si, e' corretto. Il motivo e' che la pipe "astrae meno" e ti da fondamentalmente un'interfaccia a "byte".</div><div>E apre tutto il problema di come separare i messaggi, cosa considerare un messaggio... nota che le pipe non sono multi reader/multi writer (a meno che non aggiungi tu sincronizzazione... che vuole dire che di fatto ti re-implementi le Queue -- nota che per vari motivi le Queue di mp hanno *anche* un thread per darti la semantica attesa). </div><div><br></div><div> Io personalmente quello che spesso e' fare completamente a mano. Non trovo le pipe di mp particolarmente utili. In molti casi un socket unix domain a datagrammi e' proprio la cosa che vuoi, per dire. </div><div><br></div><div>Ma insomma... c'e' un po' da capire cosa ti serve, ma in generale non e' complicato da implementare.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>Ok, appena ho un po' di tempo libero mi ci metto a giocare per vedere</div><div>l'effetto che fa :-) </div><div><br></div></div></div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>