🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
6 messages
6 total messages Started by Pawel Mon, 01 Nov 2010 19:04
Równoległe uruchamianie dwóch procesów
#52004
Author: Pawel
Date: Mon, 01 Nov 2010 19:04
35 lines
2345 bytes
Witam wszystkich

Mam w tablicy zapisane sciezki dostepu do katalogow, ktore maja byc 
przetwarzane. Chcialem zrobic cos takiego

exec1(tablica[0]);
exec2(tablica[1]);

Teraz chcialem zrobic cos takiego, ze jak skonczy sie przetwarzac 
katalog w exec1, to trzeci katalog ma byc przetwarzany w exec1, chyba, 
ze wczesniej sie skonczy przetwarzac exec2, to wtedy trzeci katalog ma 
sie przetwarzac w exec2 itd.

Probowalem to robic tak, ze stworzylem sobie osobny skrypt w perlu, 
ktory zajmuje sie tylko przetwarzaniem katalogu(wywolywany jest tyle 
razy, ile jest katalogow), a glowny skrypt zajmuje sie tylko 
przydzielaniem katalogow do tego drugiego skryptu.

Problem jest w tym, ze nie bardzo wiem, jak zrobic, zeby uruchomic 
rownolegle te procesy. Probowalem exec i system, ale to wyglada, jakby 
drugi skrypt sie nie uruchamial, przynajmniej nic nie widze na konsoli, 
ani nie zapisuje nic do pliku(pliki wynikowe maja inne nazwy, wiec niema 
obawy, ze jeden nadpisuje drugi skrypt).

Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork robi 
kopie procesu glownego, a nie uruchamia osobnego skryptu.

Nie jestem specem od progamowania wspolbieznego(w perlu takze juz nie 
programowalel spory kawalek czasu), a chcialem zrobic to na dwa procesy, 
gdyz mam procka 2-rdzeniowego i chcialem wykorzystac jego mozliwosci.

Jak mozna to zrobic? Macie pomysl?

Pozdrawiam
PAweł
Re: Równoległe uruchamianie dwóch procesów
#52005
Author: Waldek M.
Date: Mon, 01 Nov 2010 19:22
8 lines
1061 bytes
> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork robi 
> kopie procesu glownego, a nie uruchamia osobnego skryptu.

Owszem, dlatego stosuje się najczęściej fork+exec.
Poza tym, myślę, że wystarczyłyby Ci wątki.

Pozdrawiam,
Waldek
Re: Równoległe uruchamianie dwóch procesów
#52006
Author: Pawel
Date: Mon, 01 Nov 2010 19:31
13 lines
1673 bytes
On 2010-11-01 20:22, Waldek M. wrote:
>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>
> Owszem, dlatego stosuje się najczęściej fork+exec.
A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
zabrac.

> Poza tym, myślę, że wystarczyłyby Ci wątki.
A czy da sie w pelni wykorzystac moc dwoch rdzeni przy uzyciu watkow? bo
jak np pakuje cos przy uzyciu 7z uzywajac watkow, to CPU nie jest w
pelni wykorzystywany, przynajmniej do takich wnioskow doszedlem, patrzac
na menedzera zadan.
Re: Równoległe uruchamianie dwóch procesów
#52007
Author: Szymon Sokół
Date: Tue, 02 Nov 2010 16:54
22 lines
2162 bytes
On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote:

> On 2010-11-01 20:22, Waldek M. wrote:
>>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
>>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>>
>> Owszem, dlatego stosuje się najczęściej fork+exec.
> A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
> zabrac.

Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec
example"...), np. tu:
http://www.wellho.net/resources/ex.php4?item=p223/f1.pl
albo i w FAQ tej grupy:
http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20
ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run.

-- 
Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
Computer Center, AGH - University of Science and Technology, Cracow, Poland  O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
Free speech includes the right not to listen, if not interested -- Heinlein  H
Re: Równoległe uruchamianie dwóch procesów
#52008
Author: neo77
Date: Wed, 03 Nov 2010 10:18
49 lines
3220 bytes
On 2 Lis, 17:54, Szymon Sokół <szy...@bastard.operator.from.hell.pl>
wrote:
> On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote:
> > On 2010-11-01 20:22, Waldek M. wrote:
> >>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
> >>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>
> >> Owszem, dlatego stosuje się najczęściej fork+exec.
> > A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
> > zabrac.
>
> Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec
> example"...), np. tu:http://www.wellho.net/resources/ex.php4?item=p223/f1.pl
> albo i w FAQ tej grupy:http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20
> ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run.
>
> --
> Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
> Computer Center, AGH - University of Science and Technology, Cracow, Poland  Ohttp://home.agh.edu.pl/szymon/PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
> Free speech includes the right not to listen, if not interested -- Heinlein  H

sub forker {
    my $pid = fork;
    if (my $pid) {                             # $pid > 0 => parent
       return;                                   # czy co tam innego
ma robic parent
    } elsif (defined $pid)  {               # $pid == 0  => child
       system(...);
       exit 0;
    } else {
          # $pid not defined => error podczas forkowania..
    }
}

no a teraz wystarczy tylko kontrolowac ilosc uruchamianych procesow,
ale to juz prosta sprawa

forker for (1 .. $MAX_PROC-1);
while (forker) {
    waitpid(-1, 0);   # czekaj az dowolne dziecko sie skonczy
}

# czekanie na reszte niedobitkow
my $p=-1;
waitpid(-1, 0) while $p != -1;


pozdrawiam
neo77
Re: Równoległe uruchamianie dwóch procesów
#52009
Author: neo77
Date: Wed, 03 Nov 2010 10:39
60 lines
3594 bytes
On 3 Lis, 11:18, neo77 <ne...@panth-net.com> wrote:
> On 2 Lis, 17:54, Szymon Sokół <szy...@bastard.operator.from.hell.pl>
> wrote:
>
>
>
>
>
> > On Mon, 01 Nov 2010 20:31:40 +0100, Pawel wrote:
> > > On 2010-11-01 20:22, Waldek M. wrote:
> > >>> Zerknalem takze do opisu forka, ale z tego co zrozumialem, to fork
> > >>> robi kopie procesu glownego, a nie uruchamia osobnego skryptu.
>
> > >> Owszem, dlatego stosuje się najczęściej fork+exec.
> > > A moglbys dac jakis przyklad kodu, bo nie bardzo wiem jak sie do tego
> > > zabrac.
>
> > Przykładów są tysiące (wystarczy w Google wpisać "perl fork exec
> > example"...), np. tu:http://www.wellho.net/resources/ex.php4?item=p223/f1.pl
> > albo i w FAQ tej grupy:http://www.kt.agh.edu.pl/perl-faq/Uruchamianie#20
> > ale pewnie prościej będzie to wystrugać za pomocą modułu IPC::Run.
>
> > --
> > Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
> > Computer Center, AGH - University of Science and Technology, Cracow, Poland  Ohttp://home.agh.edu.pl/szymon/PGPkey id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
> > Free speech includes the right not to listen, if not interested -- Heinlein  H
>
> sub forker {
>     my $pid = fork;
>     if (my $pid) {                             # $pid > 0 => parent
>        return;                                   # czy co tam innego
> ma robic parent
>     } elsif (defined $pid)  {               # $pid == 0  => child
>        system(...);
>        exit 0;
>     } else {
>           # $pid not defined => error podczas forkowania..
>     }
>
> }
>
> no a teraz wystarczy tylko kontrolowac ilosc uruchamianych procesow,
> ale to juz prosta sprawa
>
> forker for (1 .. $MAX_PROC-1);
> while (forker) {
>     waitpid(-1, 0);   # czekaj az dowolne dziecko sie skonczy
>
> }
>
> # czekanie na reszte niedobitkow
> my $p=-1;
> waitpid(-1, 0) while $p != -1;
>
> pozdrawiam
> neo77

rzecz jasna:
# czekanie na reszte niedobitkow
while (waitpid(-1, 0) != -1) { }
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads