102 / 103

Exercise: Web Crawler

Mashq: web crawler

Bu mashqda siz web crawler'ni parallellashtirish uchun Goning concurrency imkoniyatlaridan foydalanasiz.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

Crawl funksiyasini URL'larni parallel yuklab oladigan va bir xil URL'ni ikki marta yuklamaydigan qilib o'zgartiring.

Maslahat: yuklab olingan URL'larning keshini map'da saqlash mumkin, lekin map'ning o'zi bir vaqtda ishlatish uchun xavfsiz emas!

Testlar Crawl har bir URL'ni ko'pi bilan bir marta yuklashini (fetcher ni sanovchi o'ram bilan tekshiradi), https://golang.org/ dan boshlab hamma beshta URL (to'rttasi mavjud, /cmd/ esa topilmaydi) yuklashga urinilishini va Crawl hammasi tugagandan keyin qaytishini tekshiradi. ("sync" paketini import qiling.)

2-topshiriq

ParallelYuklash(f Fetcher, urls []string) map[string]string funksiyasini yozing: berilgan barcha URL'larni parallel (har biri alohida goroutine'da) yuklab, muvaffaqiyatli yuklanganlarining url -> body map'ini qaytarsin (xato bergan URL'larni qo'shmang). Mapga yozishni sync.Mutex bilan himoyalang.