Ostatnio postanowiłem napisać bibliotekę upraszczającą równoległe pobieranie wielu stron stron na raz (curl_multi_*) i oto co z tego wyszło:
http://curly.codeplex.com

Curly do działania wymaga dostępnego cURL oraz PHP w wersji przynajmniej 5.3, ze względu na używanie przestrzeni nazw i funkcji anonimowych.
Dodatkowo w bibliotece znajduje się spora liczba rzadko używanych klas, pisanych pod adaptery, których jeszcze nie ma, lub po prostu znalezionych gdzieś na dysku. Problem jest taki, że klasy te trzeba sobie wpisywać do use jeśli się chce z nich korzystać. Więc jeśli twój edytor nie tworzy automatycznie
wpisów 'use nazwaklasy;', to praca z tą biblioteką może być udręką wink.gif
Licencja jest liberalna, więc jeśli ktoś chce, to może sobie tą bibliotekę oczyścić ze "śmieci".

Żeby użyć tej biblioteki wystarczy skopiować pliki z katalogu lib i dołączyć plik Loader.php.

Przykładowy kod znajduje się tutaj: http://curly.codeplex.com/documentation
W skrócie - tworzymy obiekt klienta http, tworzymy obiekty żądań, dodajemy żądania do klienta i uruchamiamy go. Po zakończeniu działania funkcji HttpClient::execute() pobieramy zakończone żądania i odczytujemy informacje z przypisanych im obiektów odpowiedzi.

Jeżeli ktoś woli, to można również zapisać swoją funkcję lub obiekt implementujący SplObserver (używa ktoś tego?) do zdarzenia Request::requestCompletedEvent() - zostaniemy wtedy poinformowani od razu gdy dane żądanie się zakończy (patrz przykład poniżej)


Dodatkowo zrobiłem dwa testy-benchmarki sprawdzające różnicę pomiędzy sekwencyjnym a równoległym pobieraniem dużej ilości zdjęć kotów z flickr.com. Wyniki są takie:
Pobieranie sekwencyjne - http://ideone.com/jNklL
Kod
Na stronie 1 jest 63 zdjęć
Na stronie 2 jest 63 zdjęć
Na stronie 3 jest 63 zdjęć
Na stronie 4 jest 63 zdjęć
Na stronie 5 jest 63 zdjęć
Na stronie 6 jest 63 zdjęć
Na stronie 7 jest 63 zdjęć
Na stronie 8 jest 63 zdjęć
Na stronie 9 jest 63 zdjęć
Na stronie 10 jest 63 zdjęć

Pobranie zdjęć zajęło: 382.159 s


Pobieranie równoległe - http://ideone.com/ww1Mz
Kod
Na stronie 1 jest 63 zdjęć
Na stronie 3 jest 63 zdjęć
Na stronie 2 jest 63 zdjęć
Na stronie 8 jest 63 zdjęć
Na stronie 4 jest 63 zdjęć
Na stronie 6 jest 63 zdjęć
Na stronie 9 jest 63 zdjęć
Na stronie 7 jest 63 zdjęć
Na stronie 10 jest 63 zdjęć
Na stronie 5 jest 63 zdjęć

Pobranie zdjęć zajęło: 14.436 s

Różnica jest więc spora. Jednak do pobierania co najwyżej kilku stron myślę że się nie przyda.

Gdy tylko znajdę trochę czasu pojawi się więcej przykładów, a w wersji 1.0 testy jednostkowe i adapter oparty na socketach (ten już nie będzie tak wydajny). Na testy też nie starczyło mi zbyt dużo czasu, więc proszę traktować tą wersję jako bardzo eksperymentalną smile.gif

A na razie czekam na wasze opinie