🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #39832

Re: perl i multithreading (dluzsze)

#39832
From: Vava
Date: Sun, 24 Oct 2004 17:54
67 lines
3609 bytes
misiu <a@polbox.com> wrote:

> >>Ktos ma jakies pomysly albo udalo mu sie podobne zadanie? Bylbym bardzo 
> >>wdzieczny za refleksje na ten temat.
> > 
> > 
> > threads::shared, a struktura serializowna, np. modułem Storable
> > 
> > Pozdrawiam
> 
> heh poradzilem sobie wlasnie w inny sposob :) moze i metoda troche 
> "dziwna" ale skuteczna :) zademonstruje na przykladzie...
> 
>      pipe(READER,WRITER);
>      if (fork == 0)
>      {
>          close READER;
>          print WRITER "\$hash->{xxx}->{yyy}-{zzz}="text";\n";
>          exit 0;
>      }
>      close WRITER;
>      eval while <READER>;
> 
> co prawda uzycie eval niesie za soba pewnie konsekwencje ale... wydaje 
> mi sie to IDEALNA metoda na komunikacje w takim przypadku. no i nie 
> trzeba sie martwic o lockowanie bo zapis do zmiennych jest wykonywany 
> przez parent process :) ktos moze dostrzega jakies duze wady tego 
> rozwiazania?

Kiepska wydajność?
No i właściwie, to w ten sposób nie przekazujesz struktury, a pojedyńcze
wartości z takiej struktury - chyba nie bawisz się w rekurencyjne
przeglądanie całej struktury i przekazywanie w ten sposób wartość, po wartości
całego obiektu???

Jak masz bardziej skomplikowane struktury do przekazania, to jednak
lepiej serializować (nawet jak przekazujesz fajeczkami).
A jak masz tylko konkretne wartości, lecz chcesz je umieścić w konkretnym
miejscu struktury, to bym raczej przekazywał string typu "ZZZ:YYY:ZZZ=ABC"
a potem robił split"=" i split":" i wrzucał to w strukturę bez użycia eval...

Ale i tk wydaje mi się to trochę bez sensu - threads::shared na ithreads działa
naprawdę dobrze i szybko. A jeśli tylk parent pisze, to i w lockowanie
nie musisz się bawić (aczkolwiek ja bym blokował przy zapisie - nigdy nie
wiadomo, jak się projekt rozwinie, a wtedy nie trzeba będzie żmudnie poprawiać).

Popatrz też na moduły Thread::Queue i Thread::Oueue::Any (to drugie, to Thread::
Queue z dodanym w przeźroczysty sposób modułem Storable) - czasem załatwia
to naprawdę wiele problemów ;-).

Bawię się wątkami w perlu od kiedy one są dostępne i naprawdę to działa...
Jedyny problem był z wersją 5.6, przy przejściu na ithreads, gdzie to średnio
działało - w 5.8 nie mam zarzutów i nie ma czegoś, co się nie da zrealizować
(jak się już opanuje sztuczki z modułami, które nie do końca wspierają wątki,
jak Tk, LWP, czy DBI).

Teraz tylko pytanie - co tak naprawdę chcesz zrealizować - może jest prostszy
sposób?

Pozdrawiam
-- 
Vava
Wawrzyniec Zurowski
Victoria vale, et ubique es, suaviter sternutas  

-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID: <3ab6.00000e5a.417bec3d@newsgate.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.pl
References: <clg5rq$80k$1@kujawiak.man.lodz.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.pl
From: "Vava" <rosomakolakWYTNIJTO@poczta.onet.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: perl i multithreading (dluzsze)
Date: 24 Oct 2004 19:54:06 +0200
Organization: Onet.pl SA
Lines: 67
Message-ID: <3ab6.00000e5a.417bec3d@newsgate.onet.pl>
References: <clg5rq$80k$1@kujawiak.man.lodz.pl>
NNTP-Posting-Host: newsgate.onet.pl
Mime-Version: 1.0
X-Trace: newsgate.test.onet.pl 1098640446 7614 213.180.130.18 (24 Oct 2004 17:54:06 GMT)
X-Complaints-To: abuse@onet.pl
NNTP-Posting-Date: 24 Oct 2004 17:54:06 GMT
X-Mailer: http://niusy.onet.pl
X-Forwarded-For: 83.31.176.141, 192.168.243.39
X-User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera    7.50  [en]
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit