Pull to refresh
-18
0
Sergey Borisov @sborisov

User

Send message
Мне кажется в любом российском городе в туристическом районе, вас вряд ли пырнут ножом, когда вы будете из ресторана в отель идти. Меня немного удивило описание ЮАР, ведь много информации есть, которая утверждает что белое население живёт там чуть ли не в гетто, с пулемётами по периметру, направленными на внешний контур. А тут прям всё хорошо так…

Все идёт в сторону блокировки по типу КНР.
У них не получилось с телегой, они же сказали — теперь от провайдеров будут убирать это оборудование и блокировки будут на точках обмена трафика, которые контролирует государство, даже провайдер не будет знать что блокировка чего-то включена, более того никаких списков не будет, которые сейчас выгружают провайдерам.
Видимо эти несколько лет ставили оборудование, и сейчас начинают проверять его в боевых условиях.

Я их не вижу (примитивов) и в коде, который привёл в качестве примера, если dataConsumer простаивает в цикле, значит происходит прогресс dataProducer. Всё как и описано про lock-free.
Более того — эти примеры, приведены в книгах C++ Concurrency in Action и Concurrency with Modern C++ именно как вид lock_free алгоритмов.
Не вижу причин не доверять авторам этих книг, тем более один из них -член комитета по стандартизации С++ :)
Неблокирующая синхронизация

Без блокировок (англ. lock-free)
Для алгоритмов без блокировок гарантируется системный прогресс по крайней мере одного потока. Например, поток, выполняющий операцию «сравнение с обменом» в цикле, теоретически может выполняться бесконечно, но каждая его итерация означает, что какой-то другой поток совершил прогресс, то есть система в целом совершает прогресс.
Цикл в вашем коде — та самая блокировка, обойтись без которой является целью lock-free алгоритмов.

Это неблокирующая синхронизация. Мне кажется вы путаете Lock-free и Wait-free.
lock-free — алгоритмы — не используют примитивы синхронизации (типа mutex), которые сильно замедляют работу, т.к. ОС под капотом очень много делает для их правильной работы. Эти алгоритмы не свободны от ожидания, так как они могут ожидать результата от другого потока, но они продолжают работать и занимать CPU.
wait-free — это lock-free алгоритмы + свободны от ожидания, так как они НЕ ЖДУТ результата от другого потока, и каждый шаг продвигаются к своему завершению.

Т.е. для wait-free алгоритма — можно всегда сказать — сколько шагов займёт ёго выполнение.

lock-free пример указан в комментарии
wait-free — обычный атомарный счётчик — если вам надо просто его увеличить
std::atomic<int> count = {0};

void add()
{
  for (int n = 0; n < 1000; ++n) {
    count.fetch_add(1, std::memory_order_relaxed);
  }
}

int main()
{
  std::vector<std::thread> v;
  for (int n = 0; n < 10; ++n) {
     v.emplace_back(add);
  }
  for (auto& t : v) {
    t.join();
  }
}



    smp_wmb();
    WRITE_ONCE(message, &a);               datum = READ_ONCE(message);
                                           smp_rmb();

Интересно как эти операции (WRITE_ONCE/READ_ONCE) или же (smp_wmb()/smp_rmb()), реализованы — ведь если нет цикла — которой синхронизирует release/acquire — не может получиться так, что поток2 прочитает значение раньше, чем оно будет записано потоком1? Либо в этом примере это не важно, а просто главное чтобы не было data race между потоками?
Или в ядре немного хитрее реализовано, чем в stdlibc++?
В прикладных задачах обычно делают так:

std::vector<int> mySharedWork;
std::atomic<bool> dataProduced(false);

void dataProducer(){
    mySharedWork={1,0,3};
    dataProduced.store(true, std::memory_order_release);
}

void dataConsumer(){
    while( !dataProduced.load(std::memory_order_acquire) );  // <== без этого цикла синхронизации не будет, т.к. второй поток, может выполниться перед первым
    mySharedWork[1]= 2;
}

int main(){
    
  std::cout << std::endl;

  std::thread t1(dataConsumer);
  std::thread t2(dataProducer);

  t1.join();
  t2.join();
  
  for (auto v: mySharedWork){
      std::cout << v << " ";
  }
      
  std::cout << "\n\n";
  
}
Вариантов то нет. Индустрия слишком широкая, это не Apple, которая делает всё — от железа до софта.
Здесь кто-то делает железо, кто-то софт, и договорится им очень тяжело будет (вспомните внедрение USB шины в PC), пока железо появилось, потом оказалось что — нужна новая Windows 2000, вместо NT, чтобы USB пользоваться. А Apple просто выкатила IMac с USB, выкинув все старые порты для клавы\мышки
Линус думаю неплохо соображает в инструкциях процессоров (по крайней мере его заявления про бесперспективность атом — сбылись), и что-то он не очень жалует AVX этот…
www.phoronix.com/scan.php?page=news_item&px=Linus-Torvalds-On-AVX-512
«Хуже всего то — что SSD внезапно смертен» (с) — перефразируя Воланда.

У меня 128Gb Crucial сдох так. Вечером ушёл с работы — всё было отлично, пришёл утром — комп висит — перезагрузили — винта нет… В сервисе даже никакой служебной информации с него вытащить не смогли, и сразу другой выдали…
Купил себе называется «подороже», по отзывам они были гораздо лучше ADATA, хотя более дешёвые ADATA — прекрасно работали у коллег и дальше и никаких смертей с ними не было…
Поддержу вас, я купил единственный раз WiFi карту на PCI-x, и то потому что не было провода проложено.
Звуковая карта устраивает большинство людей — встроенная, кто занимается музыкой — всё равно внешнюю покупают.
Так что Apple очень круто угадали с iMac — для дома очень хорошее решение, просто всегда было подороже, чем PC, но глядя — на текущие цены на рынке, мне mac-и не кажутся сейчас такими уж дорогими, тем более на ARM они стали ещё дешевле.
Единственное что огорчает в Apple — это отсутствие возможности самому заменить SSD.

Да, очень бы хотелось чтобы Intel догнал amd по числу ядер

Да, самые топовые. :) (5900Х, 5950Х)
С учётом медленного прогресса CPU, за последние годы, его хватит надолго (мой i5 трудится 8й год), но если бы я тогда не пожалел добавить 6к (i7 стоил 12к), сейчас для компиляции кода, его бы вполне хватало. А вот i5 всё таки 4 ядра — маловато уже.
Памяти тогда я купил сразу 32gb — до сих пор хватает.
Смотрю я на текущие цены даже обычных десктопных процессоров (Ryzen 5950x) — от 75к и материнских плат к ним(25к), что-то мне маки уже не кажутся такими дорогими.
Хороший компьютер выйдет за 200к…
Думал, вот сейчас треадрипперы упадут в цене и может на них перейти с i5 Haswell, но кажется ещё придётся этому старичку послужить…
Надо напомнить, что Стив Джобс не имел технического образования, но компанию вывел в лидеры.
Интересно, отличается ли набор команд у Apple M1 от референсного ARM.
Слышал (на youtube канале) что лицензия у Apple позволяет это делать.
Мне, как конечному пользователю всё равно, «универсальный» это процессор или добавлены специальные команды, которые ускоряют типовые операции. intel ведь тоже добавляла новые команды (MMX, SSE, AVX)

Я уже заказал на ozon, не хочется с почтой связываться — а ozon послезавтра привезёт — тоже скидку даёт 100р.


Очень нравятся статьи и выступления Антона, не могу не поддержать копеечкой его труды!

FYI
На сайте ozon — самая доступная цена, с учётом скорости доставки по России. ДМК почтой рассылает.
После открытия официальных СЦ от apple в регионах — нашёл в своём городе (с сайта apple).
Такая же палатка с мастером в торговом центре. Позвонил — сказал хочу заменить батарейку — мне начали «втирать» — что сначала диагностика и только потом, если действительно батарейка — то поменяем. Я лично платить за это не собираюсь и с такими разводами -понятно почему Apple не хотела сертифицировать левые мастерские.
Хорошо бы с пассивным охлаждением DB4 CHASSIS.
Фабьен такой себе собирал (видеокарта правда всё равно с вентилятором)
fabiensanglard.net/the_beautiful_machine/index.html

Information

Rating
Does not participate
Registered
Activity