Wer crawlt so spät durch www und http?
Mein neuer Crawler läuft endlich. Das Multithreading war nicht einfach zu implementieren.
Nachdem man in Zukunft nicht um Threading herumkommen wird, wollte ich das auch endlich in C# ausprobieren. In .NET hat man mit einem Multithreading-Crawler zunächst ein paar Probleme:
- Die System.Collections in .NET sind nicht threadsafe
- HttpRequests sind nicht parallel möglich
Im Web habe ich dann noch eine Bibliothek gefunden in der Collections bei Zugriff gesperrt werden und die HttpRequests habe ich über Sockets realisiert.
Die Anwendung läuft sehr performant, selbst 50 „parallele“ Threads sind kein Problem. Der Speicherverbrauch des Crawlers hält sich in Grenzen. Im Moment wird der Scheduler aus einer First-In-First-Out-Queue gespeist die im Speicher liegt. Bei einer Million Seiten ist das … speicherintensiv.
Was jetzt noch zu tun ist um eine produktive Anwendung daraus zu machen:
- Code aufräumen; alles in Klassen verpacken
- Scheduler-Queue in eine Datenbank auslagern
Share this content:
5 Kommentare