Próbuję wdrożyć pulę pracowników w Go. Sekcja go-wiki (i Efektywne przejście w sekcji Kanały) oferuje doskonałe przykłady ograniczania wykorzystania zasobów. Po prostu stwórz kanał z buforem, który jest tak duży, jak pula pracownicza. Następnie wypełnij ten kanał pracownikami i po zakończeniu ich prześlij z powrotem do kanału. Odbieranie z bloków kanałów, dopóki pracownik nie jest dostępny. Tak więc kanał i pętla to cała implementacja - bardzo fajnie!Pula zmiennych o rozmiarach idiomatycznych w Go
Alternatywnie można zablokować wysyłanie do kanału, ale sam pomysł.
Moje pytanie dotyczy zmiany rozmiaru puli pracowników podczas jej działania. Nie wierzę, że istnieje sposób na zmianę rozmiaru kanału. Mam pewne pomysły, ale większość z nich wydaje się zbyt skomplikowana. This page faktycznie implementuje semafor przy użyciu kanału i pustych struktur w taki sam sposób, ale ma ten sam problem (te rzeczy pojawiają się cały czas podczas wyszukiwania w Google dla "semafora golang".)
dlaczego chcesz mieć pulę pracowników o zmiennych rozmiarach? – fabrizioM
@fabrizioM Pracownicy robią bardzo mało - kontrolują tylko kilka procesów zewnętrznych. Liczba pracowników powinna zależeć od obciążenia maszyn procesami zewnętrznymi i innymi czynnikami (np. Priorytetem jednego rodzaju pracy względem drugiego). – Hut8
W takim przypadku najlepiej jest ustawić inny mechanizm niż puli o regulowanej wielkości. Można na przykład uruchomić goryntynę, która sprawdza RAM lub ładunek komputera docelowego lub uruchamia zadanie, jeśli maszyna jest gotowa i planuje kolejną kontrolę, jeśli nie. Oczywiście nie wiem, co działa, ponieważ tak naprawdę nie wiem, co budujesz. – twotwotwo