Перейти к публикации

Grohuf

User
  • Сообщений

    17 237
  • Зарегистрирован

  • Посещение

  • Время онлайн

    196д 13ч 47м 7с

Все публикации пользователя Grohuf

  1. Grohuf

    Программирование[11]

    Чекнул cppreference. Оказывается при использовании std::make_shared weak_ptr не дает удалиться памяти, занимаемой всем объектом. Ну да, логично, там же одна аллокация. Короче, говно-говном.
  2. Grohuf

    Программирование[11]

    Моканье времени - вполне обычная практика. Хотя чаще надо мокать тики процессора, так как именно они в нормальном коде используются для пауз и измерения промежутков времени.
  3. Grohuf

    Программирование[11]

    Чел, я работаю над хромиумом, который делают в гугле. https://chromium.googlesource.com/chromium/src.git Если у тебя сложности с поиском Там все написано. Напряги извилины чуть-чуть. Ты хоть в курсе, как написана библиотека std? Не просто так многие вещи из нее в гугле забанены. Использование std::make_shared является обязательным. Создал объект как-то не так - привет лишние тормоза. Никаких средств быть уверенным, что объект создается именно так. Если тебе неудобно - похуй, изворачивайся. Нельзя передавать сырой указатель, поэтому всегда лишние работы со счетчиком, которые в многопоточной среде должны быть атомарными.
  4. Grohuf

    Программирование[11]

    Это писал не я, а чел из гугла. Я просто это фиксил (апстримил, офк). Ты еще не знаешь проблем шаредптра...совсем плох. А такие умные указатели (в бусте они называются intrusive) используются далеко не только в Chromium. Например, в свое время в COMе было сделано именно так. Я уже писал выше. Нагрузочное тестирование. Реализовать его мне хватило ума, когда у меня был 1 год стажа работы. В чем у тебя проблемы - не понимаю. Ты про свои гениальные тесты вида: MyClass::MyFunc() { member_variable_ = 1; } MyTest() { MyClass tested_class; tested_class.MyFunc(); assert(tested_class.member_variable_ == 1); } ? Да, очень полезные тесты. Согласен. Пишешь код в классе, а потом пишешь в тесте проверку, что все операции в функции действительно выполнились. Я просто опустил шаблонную магию, чтобы было легче читать. Так-то понятно, что будет создан шаблоном код, который вызывает this->AddRef(). Я вроде все расписал, а ты все равно не понял.
  5. Grohuf

    Программирование[11]

    Есть много причин, почему нельзя писать сложный код в конструкторе и вместо этого использовать методы Init(). Хотелось бы настучать Страуструпу по ебалу за гениально спроектированный язык.
  6. Grohuf

    Программирование[11]

    Ты не знаешь, где надо поставить слип, пока не видишь баг/крэш. Пример хитровыебанного бага: Class A : ThreadSafeRefcounted<A> { // тут что-то }; A::A() { PostTaskOnWorkerThread(this, &A::SomeMethod); } main() { auto a = MakeRefCounted<A>(); } Класс A - с подсчетом ссылок. Когда он создается, он не выставляет счетчик ссылок в единицу, потому что всегда он присваивается умному указателю, который инкрементирует этот счетчик на единицу. Однако в данном случае PostTaskOnWorkerThread тоже будет инкрементировать счетчик на единицу, чтобы объект жил, пока выполняется таска на другом треде. Когда таска выполнится - счетчик уменьшится. Так вот, если задача выполнится до окончания конструктора (что маловероятно, но может быть), то PostTaskOnWorkerThread уменьшит счетчик на единицу, счетчик станет равным нулю и объект удалится на другом потоке (несмотря на то, что конструктор еще не закончился). Когда умный указатель будет инкрементировать счетчик, он это будет делать у мертвого объекта (крэша скорее всего не будет в этом месте, но будет потом). Чтобы воспроизвести этот крэш, надо поставить слип после PostTaskOnWorkerThread. Наитупейший и бесполезнейший вариант тестов, которые у нас бывают пишут на "отъебись", чтобы не спрашивали "а почему нет тестов?"
  7. Grohuf

    Программирование[11]

    Слипом подтверждается наличие бага. То есть, у тебя где-то стреляет изредка, ты предполагаешь многопоточный баг. Находишь предполагаемое место, чтобы его имитировать, вставляешь в нужном месте слип. У тебя получается 100% воспроизведение. Значит баг найден правильно. Потом можно, конечно, на этот случай накалякать тест, который будет дергать функции в нужном порядке, но он будет тестировать только этот баг, плюс часто для этого придется раскурочивать тестируемый класс, так что мб имеет смысл и забить.
  8. Grohuf

    Программирование[11]

    По факту уже все сказано. Если ты не понял его доводы, то чем я могу помочь? У каждого есть свой предел. Многопоточные ошибки плохо тестируются. Более-менее надежный способ предполагает длительное нагрузочное тестирование, которое занимает время и поэтому плохо подходит для тестирования на каждый пулл-реквест. Многопоточные ошибки легко совершаются, трудно находятся и плохо тестируются. Поэтому код в 99% случаев надо писать без локов, а весь потокобезопасный код должен быть в базовых библиотеках, которые хорошо протестированы.
  9. Grohuf

    Программирование[11]

    Ну хоть в многопоточности дуит разбирается. А в золотом роботе я разочаровался. Похоже, его оклад соответствует навыкам.
  10. Grohuf

    Программирование[11]

    Тебе дуит правильно сказал, что хуй ты проверишь, что в данной реализации компилятор решил переставить присваивание переменным значений и что нужно было вставить memory barrier. У меня был другой случай. Код крэшился надежно только на определенной ОС. Причина? На данной ОС при захвате мьютекса гарантировано происходило переключение потоков. В то время как на других ОС переключение потоков происходило более ожидаемым образом (по времени и приоритетам) и воспроизвести проблему было нереально.
  11. Grohuf

    Программирование[11]

    Это правда пишет наш немецкий разработчик?
  12. Grohuf

    Программирование[11]

    Вообще, при хороших базовых библиотеках методы у нетредсейф класса могут вызываться с разным потоков, но это не создает проблем. Но вся эта механика спрятана, как выше написал мистер трололо, и ты об этом не думаешь.
  13. Grohuf

    Общее обсуждение игр т.7

    Лучше Surge первый пройди
  14. Grohuf

    Программирование[11]

    Это не обязательно, если используется асинхронщина. Но тогда нужно ставить ассерты, если класс дернули не с того потока.
  15. Grohuf

    Программирование[11]

    В нормальной инфраструктуре про многопоточность особо не думаешь. Должна быть удобная система из пула потоков и постановки задач в него. Если она есть, то весь код представляет из себя перекидывание задачами из одного таск раннера в другой. Примитивы синхронизации при этом не используются.
  16. Grohuf

    Rip няня

    До. Последнего. Хохла.
  17. Grohuf

    Медицинский тред т. 2

    да я сам уже 2 года 100+ вешу, хотя раньше очень легко и долго на 90 держался с таким же ростом как и у тебя. Мне вот чё интересно стало, я вспомнил что у меня раньше на ногтях в детстве появлялись такие типа белые пятнышки, и они не пропадали пока не сострижёшь эту часть, что это было? сейчас у меня такого нет. Тут нужен спец по грязным ногтям @mamont27reg
  18. Grohuf

    Программирование[11]

    Взятые нейросеткой с пикабу
  19. Grohuf

    Программирование[11]

    Внезапно, то, что человек гуглит прекрасно понятно, даже если не включена вебка.
  20. Grohuf

    Программирование[11]

    Не, с мастер паролем и отключенным восстановлением к ним доступа нет. В синхре тоже не расшифровать. Тут все ок. Можете верить товарищу грохуфу
  21. Grohuf

    Программирование[11]

    Ну у Эджа базы копируются (когда он запущен). Думаю, у хрома тоже (влом ставить). Так что при запущенном не должно быть проблем базу вычитывать.
  22. Grohuf

    Программирование[11]

    Пароли тащатся и при запущенном хроме, если там ничего не поменялось. Локнут на чтение только файл сессии. Хотя я давно не проверял, мб базы начали открывать без возможности их копировать (но тут понадобится модификация в sqlite). Вообще, безопасность данных в хроме просто убога, ничего там сохранять нельзя. В яндекс.браузере используется мастер пароль, если пользователь его задаст, конечно. Что касается нового устройства - можно использовать синхронизацию (вроде там в хроме тоже все в очень плачевном состоянии, лет 10 назад было лучше). На маке там все в кейчейне хранится, поэтому все более-менее. Кроме того, там сейчас лепят ограничения на доступ к данным чужих приложений. Из сафари уже ничего не проимпортировать. Но в целом парольный менеджер с мастер паролем и синхронизацией - как бы выход для озвученной выше проблемы. Есть, правда, один момент. Иногда пользователи удаляют пароль сами, а потом обращаются в поддержку, чтобы восстановить. Если безопасность максимальна, то восстановить нельзя. Так что сгенеренные пароли стоит использовать только на сайтах, где пароль можно восстановить.
  23. Grohuf

    Медицинский тред т. 2

    Ну хз попробуй 130 не весить например. Факт. Ожирение - высокий шанс не дожить до пенсии из-за проблем с сердцем и сосудами.
  24. Grohuf

    Последствия / Fallout

    Там таких абсурдных моментов до жопы. Так что и не факт, что "мем" (ибо мема как такового и нет). Тогда даже слова такого не было. Момент с питьем радиоактивной воды - это, конечно, тоже абсурд. Ибо выпить-съесть радиоактивный материал - 100% мучительная смерть. Хлебнуть облученной воды из лужи не равно ебануть урана по вене. ИРЛ последствия вообще могут через 40 лет проявиться в виде рака, либо не проявиться вообще. Что значит "облученной"? Я знаю только воду, в которой есть радиоактивные изотопы, особенно тяжелых металлов. Хлебнув ее, у тебя радиоактивный материал будет внутри и, в случае тяжелых металлов, не будет выводиться из организма. Это неизбежно приведет к смерти. Литвиненко передает тебе привет. В случае радиоактивного заражения, это самое важное - не допустить попадания радиоактивных веществ внутрь организма. Ибо кожа человека вполне защищает от самого опасного ионизирующего излучения (альфа и бета). Если по твоей логике в каждая лужа каждого водоёма содержит в себе целую таблицу Менделеева, то почему не сдохли вообще все? 250 лет со сброса бомб прошло, ало. Спроси авторов сериала. Счетчик Гейгера явно показывал, что вода радиоактивна. Я лучше у тебя спрошу, влияет ли дозировка Хлебнуть водицы и получить в организм несколько частичек урана (которые ты потом выведешь), либо погрызть урановый стержень - это одно и то же? Да и тяжелые металлы выводятся из организма естественным путём. Заметил, что ты очень сильно любишь делать охуительные заявления, которые любят разбиваться о здравый смысл. Хуёвая привычка. Быть патологическим балаболом лучше на анонимных площадках, где тебе не смогут предъявить за тупость. Не будем делать вид, что мы оба - химики с ебейшей квалификацией и хоть что-нибудь понимаем в этом. Я орудую здравым смыслом, ты, скорее всего, просмотренным сериалом Чернобыль и своим воображением Уран токсичен и химически, вообще-то. Поэтому грызть его не советую. Еще раз, счетчик Гейгера показывал, что вода радиоактивна. Значит там не пара молекул. Есть радиоактивную пищу или пить радиоактивную воду - это тоже самое, что пить морскую воду. Лишь гарантирует твою смерть. Если так уж хочется пить, то дистиллируешь воду и потом пьешь.
  25. Grohuf

    Последствия / Fallout

    Там таких абсурдных моментов до жопы. Так что и не факт, что "мем" (ибо мема как такового и нет). Тогда даже слова такого не было. Момент с питьем радиоактивной воды - это, конечно, тоже абсурд. Ибо выпить-съесть радиоактивный материал - 100% мучительная смерть. Хлебнуть облученной воды из лужи не равно ебануть урана по вене. ИРЛ последствия вообще могут через 40 лет проявиться в виде рака, либо не проявиться вообще. Что значит "облученной"? Я знаю только воду, в которой есть радиоактивные изотопы, особенно тяжелых металлов. Хлебнув ее, у тебя радиоактивный материал будет внутри и, в случае тяжелых металлов, не будет выводиться из организма. Это неизбежно приведет к смерти. Литвиненко передает тебе привет. В случае радиоактивного заражения, это самое важное - не допустить попадания радиоактивных веществ внутрь организма. Ибо кожа человека вполне защищает от самого опасного ионизирующего излучения (альфа и бета). Если по твоей логике в каждая лужа каждого водоёма содержит в себе целую таблицу Менделеева, то почему не сдохли вообще все? 250 лет со сброса бомб прошло, ало. Спроси авторов сериала. Счетчик Гейгера явно показывал, что вода радиоактивна.
×
×
  • Создать...