WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Linux & PHP: Köra script (CLI) på flera kärnor (https://www.wn.se/forum/showthread.php?t=1053616)

gregoff 2012-05-30 18:50

Linux & PHP: Köra script (CLI) på flera kärnor
 
Någon som känner till ett sätt att köra ett php-script via cli så att jobbet kan dra nytta av att servern har flera kärnor? För tillfället använder mitt script bara en kärna men vill kunna använda flera för att boosta upp det hela lite.

Är detta möjligt? Visst kan jag dela upp scriptet och köra dem samtidigt (för att på så vis få fördelning på flera kärnor) men vill helst bara använda mig av ett script.

Björklund 2012-05-30 20:17

http://php.net/manual/en/function.pcntl-fork.php

gregoff 2012-05-30 22:08

Citat:

Ursprungligen postat av Björklund (Inlägg 20441402)

Jo jag har kikat på den innan men helt enkelt inte förstått hur det fungerar ;-)
Tycker exemplen var väldigt förvirrade.

Det jag letar efter måste inte nödvändigtvis ligga på php-nivå.

Clarence 2012-05-31 08:31

Work/message queues. Dela upp arbetet i flera delar, kör dessa separat i varsin worker thread. T ex Gearman, RabbitMQ, AMQP, 0MQ etc.

pelmered 2012-06-01 12:21

Citat:

Ursprungligen postat av gregoff (Inlägg 20441414)
Jo jag har kikat på den innan men helt enkelt inte förstått hur det fungerar ;-)
Tycker exemplen var väldigt förvirrade.

Det jag letar efter måste inte nödvändigtvis ligga på php-nivå.

Här har du ett bra exempel: http://chemicaloliver.net/programmin...mage-resizing/

Värt att tänka på ät att du endast ska använda detta om du anropar PHP-skriptet från kommandoraden(dvs via CLI). Kör du via en webbserver kan du få oväntade resultat iom att PHP då inte är trådsäkert.

Vill du göra större grejer och skala ut det på flera maskiner så kan Gearman vara ett alternativ. Då har du en jobbserver och sedan flera worker servrar. Detta fungerar väldigt bra om du vill göra detta asynkront i bakgrunden, men det finns även stöd för att skicka tillbaka meddelanden så att du kan presentera resultat när det är klart(antingen via push eller kolla med AJAX)

gregoff 2012-06-01 13:46

Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20441513)
Här har du ett bra exempel: http://chemicaloliver.net/programmin...mage-resizing/

Värt att tänka på ät att du endast ska använda detta om du anropar PHP-skriptet från kommandoraden(dvs via CLI). Kör du via en webbserver kan du få oväntade resultat iom att PHP då inte är trådsäkert.

Vill du göra större grejer och skala ut det på flera maskiner så kan Gearman vara ett alternativ. Då har du en jobbserver och sedan flera worker servrar. Detta fungerar väldigt bra om du vill göra detta asynkront i bakgrunden, men det finns även stöd för att skicka tillbaka meddelanden så att du kan presentera resultat när det är klart(antingen via push eller kolla med AJAX)


Detta såg ut som nåt som skulle kunna funka för mig. Men hur begränsar jag antalet grenar i en foreach-loop? När jag har alla (ex 4 st) kärnor upptagna så vill jag vänta med att skapa en gren till tills att en av dem är färdig.

Clarence 2012-06-01 14:28

Citat:

Ursprungligen postat av gregoff (Inlägg 20441520)
Detta såg ut som nåt som skulle kunna funka för mig. Men hur begränsar jag antalet grenar i en foreach-loop? När jag har alla (ex 4 st) kärnor upptagna så vill jag vänta med att skapa en gren till tills att en av dem är färdig.

Då använder du gearman och 4 worker threads.

Att forka processen ställer till fler problem än det löser vid alla användningområden förutom CLI-script. Du låser in dig vid en PHP-implementation och får göra fulhack för att stödja en annan. Implementationer för webbservrar för ett språk utan riktig trådning är helt enkelt anpassad för att köras i en process. Du kommer förlora prestanda och få svårare att optimera dina inställningar.


Alla tider är GMT +2. Klockan är nu 09:46.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson