НО разработчики используют TinyGo, в котором сборщик мусора попроще и запускается когда недостаточно места в куче. Если между вызовом proxy_on_memory_allocate и моментом возврата владения в Go нет выделения памяти, то это условно безопасно.
Можно пример, как конкретно выглядит опасный сценарий при использовании go-pointer?
Не уловил, каким образом proxy_on_memory_allocate "превращается" для AssemblyScript
в:
/// Allow host to allocate memory.
export function malloc(size: i32): usize {
let buffer = new ArrayBuffer(size);
let ptr = changetype<usize>(buffer);
return __pin(ptr);
}
?
PS: Видимо, так:
На стороне хоста выполняется поиск malloc, если нет, то ищется proxy_on_memory_allocate
> Примерно 75 тыс. самокатов отправляют сообщения на сервер в среднем раз в минуту. Во время движения частота обращений составляет один раз в 1–5 секунд.
Интересно было бы послушать про «железо», которое стоит за этим — сколько и каких серверов и т.д. Расскажите, по возможности :)
Татьяна, а можно поподробнее узнать про параметры нагрузки системы — соотношение запросов чтение/запись, типичное время ответа, производительность (rps)?
А можно подробнее про эти транзакции? Это транзакции на запись или запросы только на чтение тоже включены сюда? Если это все вместе, каково примерно соотношение записи и чтения?
Все правильно, все справедливо. Список односвязный, как и показано на первой картинке.
В C++ можно передать кастомный аллокатор, если нет желания использовать дефолтный.
Это можно сделать штатно в Rust, но в разбираемых примерах штатный механизм работы с памятью вообще не задействован. В рамках такого подхода невозможного мало, за исключением:
Вместо этой строки должен быть растовый аналог std::aligned_storageT, а в методе push — perfect forwarding аргументов.
Пробросить параметры конструктора и собрать объект по нужному месту — нет, так нельзя. Даже в кучу поместить, гарантированно минуя стек, можно только в "ночной версии". В ряде случаев компилятор соптимизирует Box::new::(), конечно.
Собственно, как я говорил, если рассматривать Rust как "замену", то это скорее "замена" языка C, чем C++.
Задача была в следующем, мы должны спроектировать нотификейшн систем, который отправлял бы нотификейшены, когда его об этом будут просить сторонние сервисы.
Можно более подробно про условия задачи? Также не очень понятны требования:
Можно пример, как конкретно выглядит опасный сценарий при использовании go-pointer?
Не уловил, каким образом
proxy_on_memory_allocate
"превращается" для AssemblyScriptв:
?
PS: Видимо, так:
Интересно было бы послушать про «железо», которое стоит за этим — сколько и каких серверов и т.д. Расскажите, по возможности :)
Да, есть такой момент — если надо из программы на Go «выжать» максимум, то надо много читать.
2431 ops - как-то маловато. Да ещё и latency 9.8, странно. А каков общий размер записи, примерно?
Татьяна, а можно поподробнее узнать про параметры нагрузки системы — соотношение запросов чтение/запись, типичное время ответа, производительность (rps)?
Интересный вариант. Попробовал так:
go run -gcflags="-l=4 -m -m" concgo.go s > o 2>&1
o
пишут:is_convergent
не во "вложенности", а в "сложности"?-l=4
можно использовать "в бою"?В таких вопросах очень полезны базовые познания как в ассемблере так и в технологиях получения этого ассемблера из исходников.
Сибираюсь "черкнуть" пару статей про обобщенные типы в Go, там этот вопрос будет рассматриваться.
Добавил разделители для удобства. Хотя это уже "подделка данных".
Интересно, а почему не использовать терминологию Microsoft?
Очень интересно! А каков профиль нагрузки в плане соотношения чтение/запись и сколько/какого "железа" под эту нагрузку выделено?
Выходит, 10 операций в секунду на ядро?
А можно подробнее про эти транзакции? Это транзакции на запись или запросы только на чтение тоже включены сюда? Если это все вместе, каково примерно соотношение записи и чтения?
Пример с деструктурирующим присваиванием я бы переписал в таком песочницо-компилируемом виде:
Не уловил, что изменилось — было два смежных ДЦ, оба загорелись, а теперь ситуация какова?
Как быть с тем, что на море эта иллюзия наблюдается тоже, хотя домов в поле зрения нет?
Не понял, почему наблюдатель для угла D находится ближе к Солнцу, чем для D'?
Все правильно, все справедливо. Список односвязный, как и показано на первой картинке.
Это можно сделать штатно в Rust, но в разбираемых примерах штатный механизм работы с памятью вообще не задействован. В рамках такого подхода невозможного мало, за исключением:
Пробросить параметры конструктора и собрать объект по нужному месту — нет, так нельзя. Даже в кучу поместить, гарантированно минуя стек, можно только в "ночной версии". В ряде случаев компилятор соптимизирует
Box::new::()
, конечно.Собственно, как я говорил, если рассматривать Rust как "замену", то это скорее "замена" языка C, чем C++.
Можно более подробно про условия задачи? Также не очень понятны требования:
Я разве написал, что он должен заработать? В цитате этого нет. В цитате есть "Попробуем".
Тут странно. Я вижу такое:
И это работает, по крайней мере, тут.
Давайте так поступим — процитируйте какое-либо мое утверждение из статьи и далее я поясню его, если это нужно.