Судя по статье, программисты бывают трех видов: 1С, аутсорс и веб-программисты. КГ/АМ.
Программист получает больше, потому что производимый им продукт «бесконечно воспроизводим», не имеет срока годности, и в теории приносит бесконечную прибыль, потому что затраты на продажу каждой следующей копии при использовании цифровой дистрибуции равны нулю.
В общем случае, как говорит стандарт языка, implementation defined outside scope of this document. Я, честно говоря, потерял нить дискуссии.
Ты меня пытаешься убедить, что «static T t; T *pt = &t;» лучше, чем «T* pt = new T» в многопоточной среде?
Ни в коем случае! Завершение записи значения value в память по адресу mem означает, что чтение этого адреса на любом из ядер вернет одинаковый результат — value. Но если в программе есть код a = b;
c = d;
то возможно, что в момент присваивания c = d, в a еще не лежит значение b, потому что возможна параллельная запись в непересекающиеся регионы памяти. Однако чтение a в любой момент после a = b даст b.
Некая «недетерминированность» между ядрами как раз и отражает это: переход к «c = d» на одном ядре не означает, что оно завершило «a = b», из-за чего новое значение a может быть «не видно» остальным ядрам. Для этого и придумали memory barriers (которые, кстати, одинаково отсутствуют в обоих вариантах.
Я для галочки чтоли дал ссылку на пункт «Expressions»? В pt не будет записано значение до тех пор, пока не будет вычислена правая часть выражения «pt = new T», то есть пока не завершится вычисление «new T».
Рассмотрим это поподробнее. Данную строчку можно переписать следующим образом (я опущу обработку исключений для краткости)
Это все равно что сказать, что «a = b + c + d» можно записать в виде «a = b; a += c; a += d». Да, можно, но ткните меня носом в место стандарта, где сказано, что компилятор может так делать. Сначала будет вычислена правая часть выражения, и только потом произведено присваивание. Инициализация объекта входит в этот самый процесс вычисления правой части.
Так много грандиозных проектов на кикстартере набрали нужную сумму, а много из них успешно завершатся? Меня не оставляет чувство какого-то мыльного пузыря, которые начнут лопаться во множестве уже менее чем через год. Хотя может быть, это российский менталитет — видеть лохотрон в каждом сборе средств на благие начинания.
В смысле от библиотек, которые делают веб-разработку удобнее? Это для области «менее 500 запросов в секунду». Проблема c10k/c100k, как правило, либо нивелируется фронтендом, за которым живут десятки бакендов с этими «libuv», либо решается вручную с минимумом фреймворков и элементами тактодрочерства.
Программист получает больше, потому что производимый им продукт «бесконечно воспроизводим», не имеет срока годности, и в теории приносит бесконечную прибыль, потому что затраты на продажу каждой следующей копии при использовании цифровой дистрибуции равны нулю.
Ты меня пытаешься убедить, что «static T t; T *pt = &t;» лучше, чем «T* pt = new T» в многопоточной среде?
a = b; c = d;
то возможно, что в момент присваивания c = d, в a еще не лежит значение b, потому что возможна параллельная запись в непересекающиеся регионы памяти. Однако чтение a в любой момент после a = b даст b.
Некая «недетерминированность» между ядрами как раз и отражает это: переход к «c = d» на одном ядре не означает, что оно завершило «a = b», из-за чего новое значение a может быть «не видно» остальным ядрам. Для этого и придумали memory barriers (которые, кстати, одинаково отсутствуют в обоих вариантах.
И где здесь статическая переменная?
RTFM
Это все равно что сказать, что «a = b + c + d» можно записать в виде «a = b; a += c; a += d». Да, можно, но ткните меня носом в место стандарта, где сказано, что компилятор может так делать. Сначала будет вычислена правая часть выражения, и только потом произведено присваивание. Инициализация объекта входит в этот самый процесс вычисления правой части.
Зачем нужна эта громадина, когда есть libev/libevent или epoll/kqueue для любителей все делать своими руками?
Почти секунда на установку соединения как-то не вяжется в моем понимании с «прекрасной производительностью».
В смысле от библиотек, которые делают веб-разработку удобнее? Это для области «менее 500 запросов в секунду». Проблема c10k/c100k, как правило, либо нивелируется фронтендом, за которым живут десятки бакендов с этими «libuv», либо решается вручную с минимумом фреймворков и элементами тактодрочерства.