Rfw lock что это
Moto-sol.ru

Автомобильный портал

Rfw lock что это

Ford Ranger – уничтожитель прошлого

Вы знаете, сколько в маленькой квартире скапливается хлама за 10 лет? А за 20? А за 40? Я раньше не догадывался, а теперь знаю – передо мной встала задача разом от этого добра избавиться. И тут подвернулся удобный случай. Точнее не случай, а пикап Ford Ranger.

“Рейнджеры” бывают разные – зеленые, синие, красные. Нам достался рыжий. В топовой комплектации Wildtrak – с двойной кабиной, пластиковым защитным покрытием грузового отсека, шторкой-жалюзи на этом же грузовом отсеке, хромированными порогами, расширителями колесных арок, задним парктроником, салоном с “кожано-алькантаровой” обивкой, mp3-cd-чейнджером, креномерами, компасом. В общем, чего в нем только не было. Правда и стоит такая машина недешево – около 900 тысяч рублей. Есть “Рейнджеры” подоступнее – за 664 тысячи, но без всего вышеперечисленного.

Ford Ranger – это машина не американская и не европейская, а японско-тайская. Разработан пикап “Маздой” (являясь, по сути, двойником BT-50) и выпускается на совместном предприятии “Мазды” и “Форда” в Тайланде. “Тайские близнецы” продаются во всем мире, кроме Америки. Там имя Ford Ranger досталось совершенно другой машине.

С технической точки зрения Ranger прост как три копейки. Ну или как “УАЗик”: мощная рама, задний мост на многолистовых рессорах, полный привод с жестко подключаемым передним мостом и двухступенчатой “раздаткой”. Из электроники – только ABS. Никаких тебе антипробуксовочных систем, электронных “ручников” и прочей модной теперь среди кроссоверов и внедорожников мишуры.

А вот двигатель уже довольно современный: 2,5 литра, турбина, рампа высокого давления Common Rail и 143 лошадиные силы. Вполне себе легковая мощность. От такого мотора ждешь, что на низких оборотах не будет никакой тяги, а потом – на 2 тысячах – случится “турбовзрыв”. Но нет, оказалось, что тянет он как паровоз с самых что ни на есть холостых оборотов. Крутится тоже неплохо – до 4,5 тысяч, но без “взрыва”, поэтому управлять тягой удобно.

Разгоняется “Рейнджер” гораздо быстрее, чем от него ожидаешь. Причем интенсивно набирать скорость он умеет не только в городском, но и в магистральном режиме: довести стрелку спидометра до отметки “150” на этом пикапе – пустяковое дело. Ездить на такой махине с такой скоростью (длина Ranger более пяти метров – как у Mercedes S-class) ничуть не страшно и даже вполне комфортно. Колейности он не чувствует, на волнах почти не раскачивается, ям и кочек не замечает, и даже шумов в кабине почти нет – и двигатель не рычит, и ветер не воет.

В городе на “Рейнджере” тоже удобно. Обзорность великолепная, габариты понятные (кроме заднего, но там есть парктроник), коробка – с удачно подобранными передаточными числами и четким переключением. Вот только плавность хода на “порожней” машине. никакая. А на “лежачих полицейских”, если проезжать их быстро, задние пассажиры рискуют удариться о потолок головой.

Итак, вернемся к хламу. Его, как вы можете догадаться, у меня было много. Точнее – 25 “коробок для переезда”, купленных в магазине OBI. В грузовой лифт поместилось 22. В “Рейнджер” – тоже. Причем в кабине еще оставалось место для водителя и двух пассажиров – одного спереди и одного сзади.

С грузом в кузове пикап преображается: рессоры немного проседают и от дубовости подвески не остается ни следа: рыжий Wildtrak плывет по асфальту не хуже американских седанов. Правда есть один не слишком приятный побочный эффект – раскачка на волнах асфальта. Ну и тормозит груженый “Рейнджер” не сказать чтобы эффективно.

А вот двигатель 22 коробки с тяжелыми и не очень вещами ничуть не смущают. Он как тянул на любых оборотах, так и продолжает тянуть. Как крутился с энтузиазмом до красной зоны, так и крутится. Правда до 150-и разгоняться уже страшновато. В первую очередь из-за тормозов.

Хлам я отвозил за 150 километров от Москвы, на дачу. И перед, собственно, дачей меня ждало довольно серьезное внедорожное испытание – размокшая грунтовая дорога с внушительными колеями от грузовиков и тракторов. Почти всю ее я проехал на. заднем приводе – ведущие колеса были под нагрузкой, и включать передний мост оказалось лишним. В самом конце пути я все же сделал это, но совсем не из-за того, что мог завязнуть. Просто на полном приводе пробуксовки не происходит в принципе, и ты гораздо бережнее, чем на заднем, относишься к грунту.

На обратном пути – без груза – “монопривода” стало недостаточно уже через двадцать метров: разгруженные задние колеса сорвались в пробуксовку. Двигаем рычаг раздатки назад: подключается передний мост, а на панели приборов загорается лампочка RFW Lock (блокировка заднего межколесного дифференциала). И “Рейджер” едет как ни в чем не бывало. И в грязи не застревает, и руля слушается, и тормозит. Даже неинтересно.

“Форд” достался нам с пробегом всего 200 километров, и загонять его в серьезное бездорожье, чтобы поездить внатяг на понижающей, а потом все равно застрянуть – у меня не хватило смелости. Зато по грунтовкам: разбитым, размытым и заснеженным я накатался вдоволь. И по лесной узкой дороге ездил. И даже по полю. Он прет как танк, и все тут. Подвеска спокойно переваривает все – и ямы, и кочки, и кротовьи норы (смешно, конечно, но их весной действительно немало).

А еще, и это действительно важно, Ranger отлично управляется даже в непролазной грязи. Тот же Jeep Wrangler – чуть ли не эталонный внедорожник – при езде по глине может на полметра закинуть заднюю ось. А так ведь можно и на дерево “твердое” напороться.

Вот, кажется, и конец статьи. Коротко получилось, но вроде бы все сказал. Хотя нет! Заголовок, если вы помните, – “уничтожитель прошлого”. Почему? Ну, во-первых, “Рейнджер” избавил меня от барахла, которое в прошлом “жило” вместе со мной. А во-вторых он сильно повлиял на мои автомобильные вкусы. Раньше у меня и мысли не было, чтобы купить себе пикап. А сейчас есть. Нет, я не стал фанатом таких машин. Я понял, что современный пикап – это хороший автомобиль для ЭТОЙ жизни. Бездорожье, шоссе, бордюры, пробки, перевозка грузов – он все умеет. А я как раз собрался делать капитальный ремонт в загородном доме. А значит можно на год-два купить Ranger (ну или аналогичную “Мазду” BT-50), а потом снова пересесть на легковушку. Если, конечно, не заболею пикаперством.

Ножевой ликбез: замки складных ножей (ч.1)

По многочисленным просьбам наших покупателей и подписчиков из соцсетей, мы открываем подборку статей под общим названием “ножевой ликбез”, где будем рассказывать об устройстве ножей, о геометрии клинков, типе сталей и особенностях использования тех или иных моделей.

Учитывая растущий спрос на складные ножи, мы решили начать с рассказа об элементе, который отвечает за безопасность его использования, регламентирует область применения и работоспособность – это замок складного ножа.

Кто первый придумал использовать замок на складном ноже неизвестно, однако уже в 16-17-м веке на складные ножи устанавливали предтечи современных замков. Одним из первых прототипов ножевого замка, который хоть как-то фиксировал клинок в рабочем положении, мы сейчас знаем под названием slip joint. Он до сих пор широко используется для создания классических складных ножей.

Например, его активно используют компании Boker и Victorinox. Что из себя представляет слип джойнт? Это простая металлическая пластика, которая одновременно выполняет роль спейсера и собственно замка. Эта пластина достаточно упругая, а в клинке, в его задней части сделан прямоугольный вырез. Когда мы открываем нож, пластина входит зацепление с клинком и не дает клинку провернуться против часовой стрелки. Поэтому, когда мы режем с усилием, клинок у нас не уходит вокруг оси вверх.

Замок очень интересный, абсолютно простой и технологичный, но есть один нюанс. Стоит нам чуть-чуть сильнее нажать на рукоять ножа и клинок уже начинает складываться и может произойти складывание на пальцы. Естественно, что люди обратили внимание на эту проблему и уже в 19 веке появляются замки, которые позволяют жестко фиксировать клинок в рабочем положении.

По устройству и принципу работы замки современных складных ножей можно разделить на несколько групп, о которых пойдет речь ниже. Начнем мы, пожалуй, с самой популярной и самой массовой группы – это замки типа liner lock.

1. Замок liner lock представляет собой упругую пластину, которая является частью плашки рукояти. Металлическая плашка с одной стороны ножа была разрезана и частично выгнута и после этого затермичена. Когда мы раскладываем нож, клинок у нас двигается вокруг своей оси, и в один момент пружина лайнер лока поднимается вверх и упирается в заднюю часть клинка.

Читать еще:  Шрус что это такое в автомобиле

Пружина не дает клинку уйти вниз и сложиться на пальцы. Этот замок максимально прост для производства, что позволяет создавать надежные ножи в бюджетном ценовом сегменте. Еще одно преимущество заключается в том, что рукоять таких ножей имеет сквозную конструкцию, без применения спейсеров и без применения каких-либо дополнительных деталей. Это очень сильно облегчает процесс чистки ножа.

Для того чтобы почистить такой нож от пыли и грязи, которые попали внутрь, достаточно окунуть рукоять воду и прополоскать. Вода свободно проходит двух сторон рукояти и вымывает даже мельчайшие частички пыли и грязи.

2. Сходный по принципу тип ножевого замка, но слегка отличающийся по дизайну, это frame lock. В чем же состоит основное отличие замка фрейм лок от замка лайнер лок? Замковая пластина на замках лайнер лок спрятана под плашки, то есть пластина у нас находится внутри рукояти. А на замке фрейм лок пластина находится снаружи, никакой накладки с этой стороны нет. В этом есть свои положительные и отрицательные стороны.

Основным плюсом замка фрейм лок является его прочность. Если сравнить замковую пластину фрейм лок и замковую пластину замка лайнер лок, мы видим что пластина замка фрейм лок будет толще в 1,5-2 раза. Естественно, чем толще материал, тем выше надежность. Значительным преимуществом является тот факт, что когда мы берем в руку нож и режем что-то с большим усилием, на ноже с замком фрейм лок наш палец опирается прямо на замковую пластину. Это является дополнительным предохранителем непроизвольного складывания на пальцы.

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

3. Третью разновидность замков liner lock использует компания Spyderco и называются этим замки compression lock. Главное отличие этого типа замков заключается в том, что пружинная пластина, которая на дает клинку сложиться на пальцы, расположена сверху. Важным моментом этого замка является наличие опорного штифта, который не дает клинку провернуться вокруг своей оси. Компания Spyderco утверждает и всячески подчеркивает, что именно компрешн лок явлется более безопасным, чем замки типа лайнер лок и фрейм лок.

4. Следующим замком, о котором стоит обязательно рассказать, является замок back lock, который был изобретен основателем компании Buck Баком Хойтом более ста лет назад. По своему инженерному устройству, замок бэк-лок максимально близок к замку слип джойнт, но при этом имеет и кардинальные отличия. Как правило, замок бэк лок состоит из двух деталей: это коромысло с зацепом и пружина.

Некоторые модели замков могут иметь только коромысло, которое одновременно выполняет функцию пружины. В задней части клинка расположен фигурный вырез, в который попадает зацеп коромысла, когда мы открываем нож. Соприкосновение этих деталей позволяет обеспечить жесткую фиксацию клинка в рабочем положении. Форма зацепа и выреза на клинке обеспечивает решение сразу двух задач: клинок не проворачивается вокруг оси вверх и не складывается нам на пальцы.

Одной из неизбежных особенностей замков такого типа является вертикальный люфт, который появляется со временем за счет истирания более мягкой стали на коромысле. Отсюда проистекают небольшие ограничения в функционале. Нож с замком бэк-лок не рекомендуется использовать для выполнения рубящих ударов. В этом случае нагрузка приходится именно на то место коромысла, которое постепенно стирается. Такая нагрузка будет постепенно укорачивать срок службы вашего ножа.

5. Одной из более надежных вариаций замка бэк-лок является замок tri-ad-lock, который разработал американский дизайнер Эндрю Демко. Замок три-ад-лок имеет такую же конструкцию, как и замок бэк-лок: коромысло с зацепом и пружина. Главным отличием является наличие опорного штифта, который запрессован в накладки рукояти и располагается между клинком и зацепом коромысла.

Что же это дает? При выполнении силовой работы клинок упирается в этот штифт, который распределяет нагрузку по рукояти и поэтому коромысло здсь разгружено оно не несет абсолютно никакой нагрузки. Соответственно коромысло, не имея прямого контакта в этой точке с клинком, не получает избыточной деформации, которая приводит к появлению вертикального люфта.

Форум по СНПЧ: Принтеры серии Epson L “Key Lock” – Форум по СНПЧ

Важно

  • 2 Страниц
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Принтеры серии Epson L “Key Lock” Чем и как будем печатать?

| Сообщение #1 Отправлено 27 Февраль 2018 – 11:26 WWM

    • Оффлайн
    • Инфо
      • Сообщений: 14 330
      • Регистрация: 11 окт 12
      • Репутация: 3875
      • Репутация 2019:
  • Профи

Вышли новые принтеры со встроенной СНПЧ. Теперь она действительно встроенная, причем фронтально.
Описание характеристик принтеров можно почитать на сайте Epson, переписывать сюда нет смысла.
Посмотрим на практике что оно такое.
Позиционируются они как для печати документов. Ну и правильно. Черный пигмент, цветная водянка.

Нас заинтересовала эта серия с двух причин:
1. И раньше были устройства подобные с черным пигментом и СМУ водянка (L605, L655, L1455), но там всем знакомые чернила – черный пигмент тот же, что и для М-серии, а водянка от 4-х цветных L100/200/300. А здесь – НЕТ. Чернила другие. Не только по номеру, баночке, но и физико-химии.
2. Стало интересно посмотреть на Key Lock.

Прикрепленные изображения

Сообщение отредактировал WWM: 27 Февраль 2018 – 11:20

| Сообщение #2 Отправлено 27 Февраль 2018 – 11:57 WWM

    • Оффлайн
    • Инфо
      • Сообщений: 14 330
      • Регистрация: 11 окт 12
      • Репутация: 3875
      • Репутация 2019:
  • Профи

Прикрепленные изображения

| Сообщение #3 Отправлено 27 Февраль 2018 – 12:29 WWM

    • Оффлайн
    • Инфо
      • Сообщений: 14 330
      • Регистрация: 11 окт 12
      • Репутация: 3875
      • Репутация 2019:
  • Профи

Прикрепленные изображения

| Сообщение #4 Отправлено 27 Февраль 2018 – 15:30 MaK7

    • Оффлайн
    • Инфо
      • Сообщений: 5 002
      • Регистрация: 16 май 13
      • Репутация: 845
      • Репутация 2019:
  • Профи

WWM сказал:

А для простоты нельзя ли напечатать тестовое фото и тестовый текст на новом агрегате, и любом из перечисленных?
Увидим и цветопередачу, и растрирование, и пропечатку мелких букв. Сравним.
Заодно сравнить реальную скорость (за сколько секунд печатается ну допустим стостраничный документ с текстом и графикой).
Потому как ковырять принтер – это конечно интересный процесс, но ежели принтер печатает хуже, либо так же красиво, но заметно медленнее – то выбора при покупке особого стоять не будет.
А потом уже можно и в начинке поковыряться, и картинки в камере “посветить”.

| Сообщение #5 Отправлено 27 Февраль 2018 – 16:25 olegkid

    • Оффлайн
    • Инфо
      • Сообщений: 479
      • Регистрация: 20 апр 11
      • Репутация: 66
      • Репутация 2019:
  • Спец

Сообщение отредактировал olegkid: 27 Февраль 2018 – 16:27

| Сообщение #6 Отправлено 27 Февраль 2018 – 19:29 WWM

    • Оффлайн
    • Инфо
      • Сообщений: 14 330
      • Регистрация: 11 окт 12
      • Репутация: 3875
      • Репутация 2019:
  • Профи

MaK7 сказал:

Как снять блокировку FAP Lock если нет доступа к настройкам? Безысходность?

Ситуация такая у друга на телефоне после обновы потребовался гугл аккаунт, естественно он был безвозвратно утерян. После hard reset этаже песня, через Odin обновить прошивку нельзя, recavary другой поставить тоже нельзя, а во всем виновата защита от нелицензионных прошивок FAP lock, поискав инфу в инете наткнулся что через Odin некоторые хитрецы на некоторые телефоны устанавливают права root с помощью файлика md5 аля tar учитывая мой лоу лвл в познаниях кода понять приницип их работы и написать свой файлик под свою модель я не смогу. Проблема в том что такого файлика для получения root прав для модельки: Samsung GALAXY GRAND Prime SM-G531H/DS

Нету =(. В сервис нести за 1.5к безумие т.к. дело вроде не хитрое нужен только файлик

Дубликаты не найдены

FAP Lock. Сначала подумал, что он блокирует нечто другое

те же мысли, а потом читаю Odin, рековери, мд5, думаю – неужто тут борьба отца программиста с одарённым школьником

Читать еще:  Что лучше нива шевроле или уаз патриот

Да название у него такое))

Ну мне кажется что у большой части населения России дома стоит пиратская винда так что про оценку интеллектуального труда молчу.

а 4pda для кого создан?

Помочь сложно? Если дельное есть что-то то вперед. Из существующей инфы в инете я нашел только то что написал выше, видать я король нубов )

Впрочем в 4pda как мне кажется народу меньше будет. ну пойду там еще пост сделаю

Прочитал весь топик от а до я данной ситуации нет ни у кого.

потому и спрашиваю

Аллилуя Спасибо мог бы до вас дотянутся дал бы чайку с печеньками))

Зачем мне чайка? Просто печеньки будет достаточно))

в той теме fap lock уже 100 раз обсуждался и снять его элементарно

Так спроси там или попробуй сходить на xda

ну пойду там еще пост сделаю

во всем виновата защита от нелицензионных прошивок FAP lock

Хм дело в том что заводская не ставится так же. я уже не знаю по какой причине, но в логах в рекавари пишет Verification failed

Там надо не пост делать, а писать в ветку по своему устройству. И вообще, чаще всего, в ветке по девайсу описаны уже все возможные неисправности и способы их устранения. И да, мой совет – самый дельный, что ты можешь тут получить.

а в чем сложность восстановить гугло-аккаунт ?

Вот инструкция (сам делал! все получилось)

1 Вот этот файл кидаем на флешку.

2 Телефон включаем,подключаем к сети и доводим до ввода гугл аккаунта.

3 Подключаем флешку через ОТГ к телефону(наживую вставить сд карту не прокатит),откроеться окно.

4 Устанавливаем прогу,которую кинули на флешку,телефон попросит разрешения установки т.к. файл не подписан,нажимаем принять.

5 Нас выкидывает в меню безопасности,ставим галку разрешить неизвестные источники и ставим приложение.

6 Сразу после установки нажимаем открыть установленное приложение и попадаем в меню телефона.

7 В меню заходим в Архивация и сброс-сброс параметров и подтверждаем.

8 Радуемся разлоченному телефону после перезагрузки))Мопед не мой,нашел на просторах у одного индуса,даже на ХДА ещё нет))

Видео https://www.youtube.co…atur. =&v=PA0GJZaepqQ

Хмм интересное умозаключение, если вы знаете решение данной проблемы может поделитесь?

А я тут другу на халяву делаю ))

Нуу кое что могу

Последняя фраза просто убила. Нищеброды совсем обнаглели.

У доктора так же скажешь, типа: Вам за осмотр денег чтоль надо, вы же тока посмотрели? Да и на машине диагностику бесплатно должны бы делать, ведь глянул и всё.

Я свою S2 прошивал сам и честно говорю там дел как 2 пальца об асфальт, дело в том что файл не могу найти и видимо тут мне с этим никто не поможет.

FRP! Обход блокировки гугл, на современных телефона Samsung! Новый способ.

Здравствуйте дорогие друзья, и уважаемые подписчики!

Продолжим цикл постов, про снятие блокировки Google. Что это такое, можно подробно прочитать в моих предыдущих постах.

Относительно недавно, я публиковал простой способ, как обойти подобную блокировку без компьютера, но надо понимать, что компания Samsung, если не первой (по сравнению с Huawei/honor/nokia), то как минимум третей, по частоте обновлений политики безопасности, закрывает актуальные уязвимости, в своем программном обеспечении.

Сегодня я Вам показываю новый, простой способ, по обходу данной блокировки, на примере Samsung s7, g930f, на базе 4 загрузчика.

Способ протестирован на многих аппаратах – пользуйтесь.

Если будут какие либо вопросы, я со свей стороны постараюсь ответить на них в комментариях. До встречи ))

GT-N8000 не включается.

Приветствую, Пикабу. Зашёл очередной аппарат после очередного сервиса. Висит на заставке, не прошивается. Для этих моделей все банально – замена еММС памяти. Возможно, кому-то будет интересно. Итак приступим.
Для начала, попытаемся его зашить, вдруг случится чудо 🙂

М-да, чуда не произошло. При попытке разметить память программатор выдал ошибку и послал лесом. Поломка ясна, объем работы так же.

Окуратненько снимаем, чистим компаунд. Готовим посадочное место

Готово. Теперь работаем с памятью. Делаем разметку, правим boot config, прописываем нашу прошивку. Для самсунгов, в основном, я записываю память по factory image, тоесть, записываю прошивку непосредственно через программатор. Почему? – экономлю место на жёстком диске. Дампы храню только для экзотики.

Когда все готово, запаиваемся.

Собираем, проверяем, прошиваем.

Все отлично. Пробуем прогружать в ОС Андроид

Работает. Правим “цифры” чтоб пользоваться интернетом (планшет у нас 3G).

Вставляем симку, пробуем звонить.

Ремонт окончен.
Всем удачных ремонтов!

Алло, Бен, это Данила. Ай нид хелп! (слетел BIOS)

Привет, ребята-пикабушники, помогите разобраться, пожалуйста.

К сути. Пришла я в прекрасный (нет) вечер домой и не смогла включить комп (выключала его до этого без извращений, как обычно). Комп старенький, но тянущий Skyrim и тяжелые файлы Excel, а большего мне и не надо.

После нескольких безуспешных нажатий на кнопку включения на системнике попробовала выключить и включить его через тумблер на задней панели. Возможно это стало моей фатальной ошибкой. Тем не менее после этого он включился и выдал следующее: “Recovery BIOS request”, вставьте флоппи или флешку.

Что было предпринято:
– скачана прошивка BIOS с офф.сайта материнки, записана на флешку (кинула 2 файла из скаченного архива), флешка отформатирована на FAT32 – не помогло;
– заменена батарейки в мат.плате – не помогло;
– создана загрузочная флешка при помощи проги “Rufus”, далее закинуты на нее файлы прошивки – не помогло.

Комп видит флешку, но пишет, что необходимые файлы на ней не найдены.
Кстати, еще нюанс: на самом железе мат.платы модель H55M-e33, а сверху наклейка H55M-p31. Пробовала прошивки и для той, и для другой (судя по виду платы – наклейка ближе к правде). Производитель платы MSI. Флешки объемом 2 и 4 Gb. Разобрала комп – визуально сгоревших секторов ни на чем нет.

Буду рада советам и вашему опыту! Ютуб и гугль мне не помогли 🙁 Пыталась вызвать ПК-мастеров из 5 доступных в моем городе все меня послали, ибо не знали, как быть.

Заранее спасибо, комменты для минусов прилагаю.

Согласно правилам сообщества:
мой уровень – я девочка, но с компом дружу;
фото приложу, если это потребуется;
оборудование – отвертка и энтузиазм.

Да, в тэги я не очень.
Хорошего всем дня и заранее спасибо!

Введение в lock-free программирование

В этом посте мы хотели бы еще раз поднять тему программирования без блокировок, сперва дав ему определение, а затем выделить из всего многообразия информации несколько ключевых положений. Мы покажем, как эти положения соотносятся между собой, с помощью блок-схем, а потом мы немного коснемся деталей. Минимальное требование к разработчику, постигающему lock-free, — умение писать правильный многопоточный код, используя мьютексы или другие высокоуровневые объекты синхронизации, например, семафоры или события.

Программирование без блокировок (Lock-free) — это своего рода испытание, причем не столько из-за сложности самой задачи, сколько из-за трудности постижения сути предмета.

Мне повезло получить первое представление о lock-free из превосходной подробной статьи Брюса Доусона “Lockless Programming Considerations”. И как многим другим, мне довелось применить советы Брюса на практике, занимаясь разработкой и отладкой безблокировочного кода на таких платформах как Xbox 360.

С тех пор в свет вышло множество хороших работ, начиная с абстрактной теории и доказательств корректности и заканчивая практическими примерами и подробностями аппаратного уровня. Я приведу список ссылок в примечаниях. Порой информация в одном источнике противоречит другим, например, некоторые работы предполагают последовательную консистентность (sequential consistency), что позволяет обойти проблемы упорядочения памяти (memory ordering) — настоящее бедствие для C/C++ кода. В то же время новая библиотека атомарных операций стандарта C++11 заставляет взглянуть на проблему в новом свете и отказаться от привычного многим способа представления lock-free алгоритмов.

Что это?

Обычно безблокировочное программирование описывают как программирование без мьютексов, которые также называют блокировками (locks). Это верно, но это лишь часть общей картины. Общепринятое определение, основанное на академической литературе, немного шире. “Без блокировок” — это в сущности некое свойство, которое позволяет описать код, не вдаваясь в подробности о том, как он написан.

Как правило, если какая-то часть вашей программы удовлетворяет нижеперечисленым условиям, то эта часть может полноправно считаться lock-free. И наоборот, если данная часть этим условиям не удовлетворяет, lock-free она не будет.

Перевод: Вы работаете с несколькими потоками (прерываниями, обработчиками сигналов и т.д.)? — Да. — Потоки имеют доступ к разделяемой памяти? — Да. — Могут ли потоки блокировать друг друга (другими словами, можно ли выполнить планирование потоков так, чтобы они заблокировались на неопределенное время)? — Нет. — Это программирование без блокировок.

Читать еще:  Какой радиатор лучше алюминиевый или медный

В этом смысле, термин lock (блокировка) в lock-free относится не непосредственно к мьютексам, с скорее к возможности того, что само приложение каким-то образом окажется заблокированным, будь то взаимоблокировка (deadlock), динамическая взаимоблокировка (livelock) или гипотетического планирования потоков, выполненного вашим злейшим врагом. Последний пункт может показаться забавным, но он-то и является ключевым. Разделяемые мьютексы легко вывести из строя: как только один поток получает мьютекс, ваш недоброжелатель может просто больше никогда не выполнять планирование этого потока. Конечно, реальные операционные системы таким образом не работают, пока мы просто определяем термины.

Вот простой пример операции, которая не содержит мьютексов, но все равно не является lock-free. Вначале X = 0. В качестве упражнения подумайте, как выполнить планирование двух потоков таким образом, чтобы ни один не смог выйти из цикла.

Никто не ожидает, что большое приложение будет полностью lock-free. Обычно из всего кода мы выделяем подмножество lock-free операций. Например, в безблокировочной очереди может быть некоторое количество безблокровочных операций: push , pop , возможно, isEmpty и т.д.

Херлихи и Шавит, авторы книги The Art of Multiprocessor Programming, склонятся к тому, чтобы представлять такие операции в виде методов класса, и предлагают следующее краткое определение lock-free: «при бесконечном выполнении бесконечно часто вызываемый метод всегда завершается». Иными словами, пока программа может вызывать такие lock-free операции, количество завершенных вызовов будет увеличиваться. Во время таких операций блокировка системы алгоритмически невозможна.

Одно из важных последствий программирования без блокировок: даже если один поток будет находиться в состоянии ожидания, он не помешает прогрессу остальных потоков в их собственных lock-free операциях. Это определяет ценность программирования без блокировок при написании обработчиков прерываний и систем реального времени, когда определенная задача должна быть завершена за ограниченный отрезок времени, независимо от состояния остальной программы.

Последнее уточнение: операции, специально предназначенные для блокировки, не лишают алгоритм статуса lock-free. Например, операция pop очереди может блокироваться намеренно, если очередь пуста. Остальные пути все равно будут считаться безблокировочными.

Механизмы программирования без блокировок

Оказывается, для того, чтобы удовлетворить условию отсутствия блокировок, существует целое семейство механизмов: атомарные операции (atomic operations), барьеры памяти (memory barriers), избегание проблем ABA — лишь некоторые из них. И в этот момент все становится адски сложно.

Как же соотносятся все эти механизмы? Для иллюстрации я нарисовал следующую блок-схему. Расшифрую каждый блок ниже.

Операции атомарного изменения (RMW, read-modify-write)

Атомарные операции — это такие операции, которые производят неделимые манипуляции памятью: ни один поток не может наблюдать такую операцию на промежуточной стадии выполнения. В современных процессорах многие операции уже атомарны. Например, обычно являются атомарными выровненные операции чтения/записи простых типов.

RMW-операции идут еще дальше, позволяя атомарно выполнять более сложные транзакции. Они особенно полезны, когда алгоритм без блокировок должен поддерживать несколько потоков на запись, потому что при попытке нескольких потоков выполнить RMW на один адрес, они оперативно выстроятся в ряд и выполнят эти операции по одному. Я уже касался RMW в этом блоге, когда рассказывал о реализации легковесного мьютекса, рекурсивного мьютекса и легковесной системы логирования.

Примеры RMW-операций: _InterlockedIncrement в Win32, OSAtomicAdd32 в iOS и std::atomic ::fetch_add в C++11. Примите к сведению, что стандарт атомарных операций C++11 не гарантирует, что реализация будет lock-free на любой платформе, поэтому лучше всего изучить возможности вашей платформы и инструментария. Для уверенности можно вызвать std::atomic<>::is_lock_free .

Различные семейства процессоров поддерживают RMW по-разному. Такие процессоры, как PowerPC и ARM, предоставляют LL/SC-инструкции (load-link/store-conditional, загрузка с пометкой/попытка записи), что позволяет реализовать вашу собственную RMW-транзакцию на низком уровне, хотя так делают нечасто. Обыкновенных RMW обычно бывает достаточно.

Как показано на блок-схеме, атомарные RMW — необходимая часть программирования без блокировок даже на однопроцессорных системах. Без атомарности поток может быть прерван на середине транзакции, что может привести к рассогласованному состоянию (inconsistent state).

Циклы Compare-And-Swap

Возможно, наиболее обсуждаемая RMW-операция — compare-and-swap (CAS). В Win32 CAS доступна с помощью семейства встроенных функций, таких как _InterlockedCompareExchange . Разработчики часто выполняют compare-and-swap в цикле, чтобы повторять попытки выполнить странцанцию. Этот сценарий обычно включает в себя копирование разделяемой переменной в локальную, совершение над ней какой-то работы и попытку опубликовать изменения, используя CAS.

Такие циклы тоже считают lock-free, так как если тест не прошел в одном потоке, значит, он должен был пройти в другом, хотя некоторые архитектуры предлагают более слабый вариант CAS, где это не всегда так. Во время реализации CAS-цикла необходимо стараться избегать ABA проблемы.

Последовательная согласованность (sequential consistency)

Последовательная согласованность означает, что все потоки согласны с порядком, в котором выполнялись операции с памятью, и что этот порядок соответствует порядку операций в исходном коде программы. При последовательной согласованности мы не пострадаем от проделок переупорядочивания памяти, подобных той, что я описал в предыдущем посте.

Простой (но очевидно непрактичный) способ достичь последовательной согласованности — выключить оптимизации компилятора и запускать все потоки на одном процессоре. Память одного процессора никогда не окажется в беспорядке, даже если потоки запланированы на случайное время.

Некоторые языки программирования предоставляют последовательную согласованность даже для оптимизированного кода, выполняемого на нескольких процессорах. В C++11 можно объявить разделяемые переменные как атомарные (atomic) типы C++11, обеспечивающие упорядочение. В Java можно пометить все разделяемые переменные как volatile . Вот пример из моего предыдущего поста, переписанный в стиле C++11:

Так как атомарные типы C++11 гарантируют последовательную согласованность, получить на выходе r1 = r2 = 0 невозможно. Чтобы получить желаемый результат, компилятор добавляет дополнительные инструкции — обычно это барьеры памяти или RMW-операции. Из-за этих дополнительных инструкций реализация может оказаться менее эффективной, чем та, где разработчик работает с упорядочением памяти напрямую.

Упорядочение памяти (memory reordering)

Как предлагается в блок-схеме, каждый раз при lock-free разработке под мультиядерную (или любую другую SMP-) систему, когда ваше окружение не гарантирует последовательной согласованности, нужно подумать, как бороться с проблемой переупорядочения памяти.

В современных архитектурах существует три группы инструментов, обеспечивающих корректное упорядочение памяти как на уровне компилятора, так и на уровне процессора:

  • Легковесные инструкции синхронизации и барьеров памяти, о которых я расскажу в будущих постах;
  • Полные инструкции барьеров памяти, которые я демонстрировал раньше;
  • Операции с памятью, основанные на acquire/release семантике (семантике захвата/освобождения ресурсов).

Acquire-семантика обеспечивает упорядочение памяти для последующих операций, release-семантика — для предыдущих. Эти семантики частично подходят для случая отношений производителя/потребителя, когда один поток публикует информацию, а другой ее читает. Обсудим это более подробно в будущем посте.

У разных процессоров разные модели памяти

Когда дело касается переупорядочения памяти, у всех семейств CPU свои привычки. Правила зафиксированы в документации каждого производителя и строго соблюдаются при производстве железа. Например, процессоры PowerPC или ARM могут сами менять порядок инструкций, а семейство x86/64 от Intel и AMD обычно этого не делают. Говорят, что первые имеют более слабую модель памяти.

Есть большой соблазн абстрагироваться от этих низкоуровневых деталей, особенно когда C++11 предоставляет нам стандартный способ писать портируемый код без блокировок. Но думаю, в настоящее время большинство lock-free разработчиков имеют хоть какое-то представление о различии аппаратных платформ. Ключевое отличие, которое точно стоит запомнить, — это то, что на уровне инструкций в x86/64 каждая загрузка из памяти происходит с acquire-семантикой, а каждая запись в память — c release-семантикой — по крайней мере для не-SSE инструкций и не для памяти с комбинируемой записью (write-combining memory). В результате, раньше довольно часто писали lock-free код, который работал на x86/64, но падал на других процессорах.

Если вам интересны технические подробности того, как и почему процессоры переупорядочивают память, рекомендую прочесть Appendix C в Is Parallel Programming Hard. В любом случае, не забывайте, что переупорядочение памяти может также произойти из-за того, что компилятор переупорядочил инструкции.

В этом посте я почти не затронул практическую сторону программирования без блокировок, например, когда стоит им заниматься? Настолько ли сильно оно нам нужно? Я также не упомянул важность проверки ваших lock-free алгоритмов. Тем не менее, надеюсь, что это введение позволило некоторым читателям познакомится с основными принципами lock-free, так что они смогут дальше углубляться в тему, не чувствуя себя в полной растерянности.

Ссылка на основную публикацию
Adblock
detector