tag:blogger.com,1999:blog-410416665291724878.post269687586864672466..comments2022-12-19T13:52:22.907+04:00Comments on >рабочие заметки: lazySet: тайные страницы JMMRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-410416665291724878.post-24082172034263157882016-07-13T15:58:39.956+04:002016-07-13T15:58:39.956+04:00Я не рискну сказать, что откуда выведено: формальн...Я не рискну сказать, что откуда выведено: формальная спецификация описывает поведение volatile read/volatile write/lock enter/lock exit в терминах HB/SA, то есть, в этом смысле, никакая из этих операций не является более фундаментальной, и блокировки и волатильные операции в одинаковом приоритете.<br /><br />Исторически, наверное, семантика roach motel влияла на формулировку модели памяти, и в Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-77029944005570917932016-07-13T01:03:39.491+04:002016-07-13T01:03:39.491+04:00"Обычные ребра HB этого не запрещают: записи ..."Обычные ребра HB этого не запрещают: записи идущие после volatile write можно переставлять до нее" - JMM ничего про перестановки не говорит, а отношение HB применимо только при наличии SAs, замкнутых на PO.<br /><br />Я правильно понимаю, что это выведено из знаменитого Roach Motel, где разрешается расширять границы критической секции с учетом того, что по факту ( с точки зрения SergeZhttps://www.blogger.com/profile/09731850001602289291noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-9485626357630464112012-11-07T14:11:30.011+04:002012-11-07T14:11:30.011+04:00Да, большинство гарантий, даваемых JMM они именно ...Да, большинство гарантий, даваемых JMM они именно такие: если "нечто" уже случилось, то вот "это" и вот "то" тоже должно уже случиться. Другими словами, если ты (компилятор/процессор) откладываешь A -- будь добр заодно отложить и (Б, В...). Насколько долго ты можешь отложить А -- здесь не определяется, покуда ты откладываешь и все, что еще должен отложить. <br /><br Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-10784663183687462392012-11-05T19:56:18.577+04:002012-11-05T19:56:18.577+04:00Я правильно понимаю что все что определять jmm, эт...Я правильно понимаю что все что определять jmm, это вещи вроде, если один поток увидел какое то действие второго, то все предыдущие действия первого так же видны второму. А вот момент когда второй поток это увидит не определяется. Иными словами есть ли вообще для каких либо конструкций гарантия прогресса? Вроде как jsr 133 cookbook предлагает вставлять memory barriers, которые могли бы стать Andreyhttps://www.blogger.com/profile/00631833282868227233noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-57281754844009701822012-11-05T15:45:06.766+04:002012-11-05T15:45:06.766+04:00>А именно с тем get, который вернул значение за...>А именно с тем get, который вернул значение записанное lazySet? <br /><br />А попробуйте объяснить, что означает HB между a.lazySet(4) и a.get()->5 ?<br /><br />"Устаревшее значение" это очень расплывчатое понятие. Лучше с ним не связываться, оно только запутывает. <br /><br />Если вы в одном потоке записали в а=1, и в другом прочитали из а единицу -- значит чтение произошло Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-33326022922774499422012-11-05T14:05:13.383+04:002012-11-05T14:05:13.383+04:00А именно с тем get, который вернул значение записа...А именно с тем get, который вернул значение записанное lazySet? То есть из за отсутствия StoreLoad get вызванный после lazySet может вернуть устаревшее значение? Тут мы правда опять приходим к тому, что хронология событий на многопроцессорных машинах это некорректное понятиеAndreyhttps://www.blogger.com/profile/00631833282868227233noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-86947311812753128802012-11-04T14:18:37.574+04:002012-11-04T14:18:37.574+04:00lazySet образует HB с get, вернувшим то значение, ...lazySet образует HB с get, вернувшим то значение, которое было записано lazySet. То есть здесь все как для обычных volatile store/load.Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-50434174738107861732012-11-03T23:35:09.961+04:002012-11-03T23:35:09.961+04:00Актуальное в смысле последнее установленное... Я и...Актуальное в смысле последнее установленное... Я имел ввиду связаны ли lazySet и get happens before? Видимо из за отсутствия StoreLoad ответ нет, то есть видимость lazySet не обеспечивается читающему потоку. Или я ошибаюсь?Andreyhttps://www.blogger.com/profile/00631833282868227233noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-68421520216317158202012-11-03T22:04:49.124+04:002012-11-03T22:04:49.124+04:00Да, это и есть AtomicXXX.lazySet()
А какое значен...Да, это и есть AtomicXXX.lazySet()<br /><br />А какое значение переменной вы считаете "актуальным"?<br /><br />Барьеры чтения/записи обычно глобальны. Т.е. они не для каких-то конкретных переменных, они гарантируют какой-то порядок между всеми операциями с памятью (какого-то типа) до них, и всеми операциями (какого-то типа) после нихRuslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-92086909264954273182012-11-03T14:35:17.361+04:002012-11-03T14:35:17.361+04:00Правильно ли я понимаю, что lazySet в Atomic это о...Правильно ли я понимаю, что lazySet в Atomic это оно и есть? Но верно ли, что при вызове get мы получим актуальное значение переменной? Ведь то, что вы описываете - это store load barrier для двух разных волатильных переменных. А что есть мы сделаем lazySet в переменную, а потом ее же и прочтем?Andreyhttps://www.blogger.com/profile/00631833282868227233noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-55541656573785597962012-07-06T14:39:28.513+04:002012-07-06T14:39:28.513+04:00@andriy
Я тут добрался посмотреть на MPSC-queue. ...@andriy<br /><br />Я тут добрался посмотреть на MPSC-queue. Месяц провисела открытая страница в браузере :)<br /><br />Ничего особо нового там нет: если взять j.u.c.CLQ, и оптимизировать ее под единственного dequeuer-а, как раз что-то в таком духе и получится. Что эта штука может быть достаточно быстрой -- в этом сомнений нет, та же CLQ у меня давала ~10M/s. Но что она может быть быстрее D -- Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-62423129212215153772012-06-05T12:10:22.609+04:002012-06-05T12:10:22.609+04:00Для сравнения результаты тестов distruptor на той ...Для сравнения результаты тестов distruptor на той же конфигурации и настройках JVM как у out1.txt:<br /><br />OnePublisherToOneProcessorUniCastThroughputTest run 0: BlockingQueue=5 349 596 Disruptor=73 855 243 ops/sec<br />OnePublisherToOneProcessorUniCastThroughputTest run 1: BlockingQueue=5 220 296 Disruptor=77 700 077 ops/sec<br />OnePublisherToOneProcessorUniCastThroughputTest run 2: Andriy Plokhotnyukhttps://www.blogger.com/profile/17683648196667373541noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-85623283126230199212012-06-05T08:54:36.156+04:002012-06-05T08:54:36.156+04:00Я посмотрю код чуть позже -- скала не мой родной я...Я посмотрю код чуть позже -- скала не мой родной язык :) Но навскидку 100М/с кажется очень высокой цифрой. Как бы там не было косяков с бенчмарками...Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-5780156937992272232012-06-03T22:04:59.606+04:002012-06-03T22:04:59.606+04:00Пробовал померять способности наиболее популярных ...Пробовал померять способности наиболее популярных библиотек акторов:<br />https://github.com/plokhotnyuk/actors<br /><br />Но по ходу попалась на глаза MPSC очередь на сайте у Дмитрия Вьюкова:<br />http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue<br /><br />Было сделано несколько попыток допилить существующие (как раз за счет рискованного использованияAndriy Plokhotnyukhttps://www.blogger.com/profile/17683648196667373541noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-1746414799666074972012-06-03T22:01:05.430+04:002012-06-03T22:01:05.430+04:00Этот комментарий был удален автором.Andriy Plokhotnyukhttps://www.blogger.com/profile/17683648196667373541noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-30944906358323436522012-04-27T02:50:21.228+04:002012-04-27T02:50:21.228+04:00Мда, веселье с осознанием final помню :)Мда, веселье с осознанием final помню :)gvsmirnovhttps://www.blogger.com/profile/09213176675225121755noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-80955644774213875112012-04-26T14:19:32.037+04:002012-04-26T14:19:32.037+04:00Ну в принципе, формальных доказательств тут быть н...Ну в принципе, формальных доказательств тут быть не может -- я ж пишу, что lazySet находится вне текущей редакции JMM, поэтому как его включать в построения на ее основе -- непонятно. Т.е. не только мне непонятно -- вообще непонятно, потому что это будет второй всего случай, когда у нас в JMM есть инструкции, порождающие между-поточные HB, и при этом эти инструкции не являются SA, и не участвуют Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-65846813055041216402012-04-26T13:09:19.201+04:002012-04-26T13:09:19.201+04:00А доказательства он не приводит? Вышел бы интересн...А доказательства он не приводит? Вышел бы интересный матан-псто :)gvsmirnovhttps://www.blogger.com/profile/09213176675225121755noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-41040523913728481692012-04-25T15:41:37.083+04:002012-04-25T15:41:37.083+04:00Не знаю, отправляли ли они, но я -- отправлял :) Д...Не знаю, отправляли ли они, но я -- отправлял :) Даг ответил, что конкретно в этом use case есть гарантии корректности, хотя для доказательства прогресса нужны дополнительные предположенияRuslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-27615820793473769342012-04-25T15:28:29.627+04:002012-04-25T15:28:29.627+04:00Я вот как раз хотел у тебя спросить, не пробовал л...Я вот как раз хотел у тебя спросить, не пробовал ли ты доказать корректность работы смазнаешьчего при использовании lazySet. Думаешь, Disruptor guys отправляли код Дагу Ли? :)gvsmirnovhttps://www.blogger.com/profile/09213176675225121755noreply@blogger.com