Трето предизвикателство

  1. Имам въпрос относно условието. В него се казва "При извикването на метода Register(), да се регистрира нов слушател и да се връща канал за получаване на съобщенията (еднопосочен)." Към края на условието обаче се казва "Ако слушател изпрати съобщение, то е нормално той да получи своето си съобщение."

    Тези две изречения не си ли противоричат - да пращаме съобщение по еднопосочен канал за четене ?

  2. @Йосиф, няма да се изпраща по еднопосочния канал. Под "слушател" във второто изречение, което си цитирал се има в предвид - тази goroutine-а, в която си "регистрирал" слушател. Не е нещо, което ще тестваме, просто не искаме да се опитвате да правите някакви магии и да се чудите как да изключвате някой от "broadcast групата". Всеки изпраща през b.Send().

  3. @Цветелина, не знам до колко ще е ползено, но малко след предизвикатеството написах три различни решения (малко по генерални, а не просто за цели числа) и им пуснах по няколко benchmark теста: линк

    SyncBroadcaster е най-тривиалното решение, което би блокирало, ако някой слушател не получи съобщението в даден момент.

    AsyncBroadcaster е почти като SyncBroadcaster, но няма да блокира, а ще пусне разпращането в отделна горутина.

    LinkedBroadcaster е съсвсем различен подход за решаване на проблема и лично на мен ми хареса как се получи, но очевидно не работи добре на 1 процес.

    Не съм имплементирал решението на Киро от часовете. Според мен то ще се представи малко по-зле от AsyncBroadcaster, но има допълнително ниво на сигурност, че няма някой да си затвори канала (в другите имплементации не се връща канал за писане, а съобщението се подава като аргумент на метод, така че това няма да е проблем).

    Като цяло всяко решение си има плюсове и минуси. Ще се опитаме скоро да пуснем тестовете на предизвикателството, за да видите как сте се справили вие.

  4. Всъщност би ми харесало да се съберем и да напишем нещо с конкурентност, го рутини и т.н., тоест да имаме нещо като практическо занимание по темата до края на курса. Според мен това е ценното в езика и може би крайъгълен камък в проектите на някои хора. Не знам дали колегите ще ме подкрепят.

Трябва да сте влезли в системата, за да може да отговаряте на теми.