<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><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>
>><br>
>> Quando parlo di memoria condivisa intendo a dettaglio implementativo,<br>
>> magari nascosto sotto l'astrazione di una libreria o di un linguaggio.<br>
>> Ad esempio in Rust alla fine *usi* memoria condivisa, ma il linguaggio<br>
>> ti permette di ragionare senza pensare a sincronizzazioni esplicite.<br>
><br>
><br>
> Concordo.<br>
><br>
> Occorrebbe che il linguaggio potesse chiamare dal sistema, ed ottenere,<br>
> un area condivisa da vari processi. Ed è proprio questo che mi piacerebbe.<br>
><br>
<br>
Vedi shmget e mmap:<br>
<a href="https://trac.nginx.org/nginx/browser/nginx/src/os/unix/ngx_shmem.c" rel="noreferrer" target="_blank">https://trac.nginx.org/nginx/browser/nginx/src/os/unix/ngx_shmem.c</a><br>
<br>
Ma come ti ha già scritto Enrico, l'accesso diretto ad un area di<br>
memoria non è banale in Python, a meno di non usare tipi primitivi a<br>
dimensione fissa.<br>
<br></blockquote><div><br></div><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><div><br></div><div><br></div><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>
>> 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><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><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><br></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>Alex</div></div></div></div>