Насколько старый визит? Раньше, когда они были совсем старыми, они вообще не умели по iButton открываться (тогда ещё это называлось Touch Memory). И кто во что горазд кустарно городили дополнительные контроллеры, которые ставились рядом с самим визитом и отвечали только за ключи.
У меня отец работал в конторе, которая обслуживала и разрабатывала домофоны. Мы такой универсальный ключ делали на PIC12C508 и упихивали его прямо в баночку от ключа.
Пулы ресурсов хорошо ложатся на архитектуру, но они помогут от GC, только если создание нового объекта требует много аллокаций/деаллокаций делать.
Топикстартеру: вы много аллокаций делаете во время обработки каждого запроса? Например, если вы в цикле много-много раз делаете append к слайсу, то у вас часто будет реаллокация буфера. Если сразу отводить запас для роста побольше при помощи make, то можно прилично сэкономить. Если вы этого уже не делаете, конечно.
Как интересно… Я в Штатах снимал деньги в одном банкомате. Меня банкомат честно предупредил, что будет комиссия добавлена. Я согласился. Снял N долларов, в банк-эмитент пришёл запрос на списание M=N+комиссия.
По моей практике, мьютексы применяются достаточно редко и только в каких-то местах, где уже надо отжать проценты производительности. Я согласен, что в примере с crypt применение мьютекса оправдано тем. что код получился проще, но он (пример) достаточно искусственный. Есть ведь функция crypt_r, лишённая этого недостатка, и никакие блокировки вообще не нужны. На реальных задачах код с использованием каналов получается более простым и читаемым.
Ваш банк берёт свой текущий курс доллара, переводит сумму снятия в рубли, добавляет комиссии и ещё несколько процентов запаса и эту сумму авторизует на вашей карте. Через несколько дней, после клиринга, когда ваш банк отправит американцам доллары, от снимет холд и спишет с вашего счёта сумму в долларах по курсу на день клиринга. Обычно курс за это время не успевает уехать сильно, поэтому в выписке вы увидите меньшую сумму, чем была изначально авторизована.
Если есть свой сервер, поставьте туда OpenVPN и поднимите соединения до него из дома и с работы. У вас ещё и ssh-сеансы перестанут разрываться при смене IP.
При взносах 200 франков в месяц у вас будет годовая франшиза 2000 франков. При 400 франков в месяц франшиза будет 300 франков. Скорую вызвать — 750 франков. Так что ещё 10 раз подумаешь перед тем, как начать думать о враче.
res := make(chan string)
go getDataFromServer(res, "Server1")
go getDataFromServer(res, "Server2")
go getDataFromServer(res, "Server3")
data := <- res
fmt.Println(data)
В этом примере канал должен быть буферизованным (с длиной буфера, как минимум, 2). Иначе будет утечка горутин. Первая горутина ответит, а остальные зависнут, пытаясь записать ответы в канал, из которого никто не читает. Сборщик мусора такое не ловит.
Это не должно вас так огорчать. Публикация расследования, пока воры не успели замести следы, это важная часть молотка, которым их тюкают по маковке. Это как если бы полицейский поймал вора и дал ему время вернуть украденное, чтобы избежать тюрьмы. С одной стороны, задача, чтобы у собственников не пропадало их имущество, решена. А, с другой стороны, другие воры бояться не будут — раскрываемость же не 100%.
Все логично. О хорошем и правильном деле тоже надо громко рассказывать. Даже если это приносит политические дивиденды политику, который лично вам не нравится, это небольшая цена по сравнению с общественной пользой проекта.
Топикстартеру: вы много аллокаций делаете во время обработки каждого запроса? Например, если вы в цикле много-много раз делаете append к слайсу, то у вас часто будет реаллокация буфера. Если сразу отводить запас для роста побольше при помощи make, то можно прилично сэкономить. Если вы этого уже не делаете, конечно.
Там тоже есть наборы с ардуино:
В этом примере канал должен быть буферизованным (с длиной буфера, как минимум, 2). Иначе будет утечка горутин. Первая горутина ответит, а остальные зависнут, пытаясь записать ответы в канал, из которого никто не читает. Сборщик мусора такое не ловит.