89 долларов в год, это конечно сумма смешная за инструмент которым зарабатываешь. Но тут важна не сумма, а как это сделано. Это, как уже упоминали в треде, худший образчик «эффективного менеджмента». Рубанем шашкой и пусть платят или идут на все 4 стороны. Это не подход компании, которая заботится о своем имидже и лояльности клиентов. Что будет когда деньги снова начнут кончаться?
Игры с серверами активации я для себя не приемлю на 100%. Это бомба замедленного действия, и постоянный источник головной боли.
Поэтому проще постепенно переехать на другой инструмент, пусть он будет и не столь продвинут. Тем более что это всего лишь редактор текста. Да, очень продвинутый, очень удобный, но он не пишет код сам.
Это сильно меняет дело в худшую сторону. Я не готов к тому что мой рабочий инструмент может превратиться в любой момент в тыкву из за проблем с интернетом или серверами активации. Опять же, существует достаточно много организаций, где доступа в интернет нет и никогда не будет.
Уважаемый gorohoroh, могли бы вы прояснить сугубо технический вопрос:
нужно ли будет иметь постоянное подключение к интернету в рамках новой лицензионной политики или вы просто будете раздавать ключи ограниченные по времени?
Я бы еще добавил самой первой рекомендацией: Никогда не используйте нигде, кроме тщательно локализованных модулей взаимодействия с legacy данными и низкоуровневыми протоколами.
В библиотеке javolution есть класс Struct для работы с такого типа данными.
Тут мы вступаем на зыбкую почву «эффективности». По сути, даже код на ассемблере, в какой то мере абстракция. Ниже лежит процессор со спекулятивным исполнением команд, branch predictor, декодеры команд, scheduler микрокоманд, иерархическая модель памяти + NUMA и т.д. Чем выше уровень абстракций — тем быстрее можно получить работающий софт. Но вот вычислить этот максимально допустимый уровень и есть основная задача.
В случае java, за этими несколькими строчками кода, будет еще jit компилятор с profile optimization со своими правилами и багами. Что может сказать человек претендующий на junior позицию в этом случае?
Ключевое слово здесь «premature». После того как выбраны алгоритмы, система написана и обладает необходимой функциональностью, есть тесты и измерена производительность на реальных данных и не хватает этих самых 12%, вот тогда можно приступать к такого рода оптимизации. Заниматься этим до — значит просто терять время и тормозить проект.
Выбор, мягко говоря, неудачный. Это все равно что дать человеку решать шахматную задачу,
рассказать как ходят фигуры, но не сказать что пешка может стать ферзем.
Человек, на основании своих базовых знаний, просто не сможет логически вывести такой вариант.
Software Optimization Guide for AMD Family 15h Processors (Bulldozer):
11.5.1 Locked Instructions as Memory Barriers
Optimization Use locked instructions to implement Store/Store and Store/Load barriers.
Application Applies to programs running on multicore processors or on multiple single core processors.
Rationale
On AMD family 15h processors, the SFENCE and MFENCE instructions are serializing. This stalls
the pipeline and the processor core cannot begin processing any further instructions until all previous
instructions are completed and any outstanding memory operations (such as prefetches and stores)
have completed. (This stall applies only to the individual integer unit of the compute unit where the
MFENCE or SFENCE instruction is executed.) Architecturally serializing instructions such as
CPUID have the same pipeline stall behavior as the MFENCE and SFENCE instructions. The
LOCKed instructions do not stall the pipeline and, thus, allow more instruction-level parallelism.
Кэши процессора поделены на блоки (cache lines, CL),
для современных Intel I7 размер CL на всех уровнях (L1, L2, L3) равен 64 байтам.
MESI протокол работает в терминах CL. Из за этого может возникнуть эффект false sharing,
когда не связанные в исходном коде участки памяти занимают 1 CL:
class fs {
volatile long l1;
volatile long l2;
}
если переменные l1 и l2 попали в одну CL, то запись в любую из них повлечет за собой MESI invаlidate.
Если поток 1 на CPU1 постоянно обновляет l1, а поток 2 на CPU2 постоянно обновляет l2, то производительность сильно упадет, поскольку оба CPU будут конкурировать за одну CL.
Совершенно верно, в 99% случаев это не нужно. Но если разрабатывется нечто похожее на LMAX Disruptor или многопоточный расчетный алгоритм, то нужно иметь в виду такой эффект.
Использование VTune или его аналогов на других платформах, поможет оценить эффективность HPC приложения на уровне счетчиков CPU.
До выхода Java 8, к сожалению, sun.misc.Contended в production недоступен. Padding c применением наследования используется в jmh. Из BlackHole.java:
* 1. Superclass fields are not reordered with the subclass' fields.
* No practical VM that we are aware of is doing this. It is unpractical,
* because if the superclass fields are at the different offsets in two
* subclasses, the VMs would then need to do the polymorphic access for
* the superclass fields.
Игры с серверами активации я для себя не приемлю на 100%. Это бомба замедленного действия, и постоянный источник головной боли.
Поэтому проще постепенно переехать на другой инструмент, пусть он будет и не столь продвинут. Тем более что это всего лишь редактор текста. Да, очень продвинутый, очень удобный, но он не пишет код сам.
нужно ли будет иметь постоянное подключение к интернету в рамках новой лицензионной политики или вы просто будете раздавать ключи ограниченные по времени?
В библиотеке javolution есть класс Struct для работы с такого типа данными.
рассказать как ходят фигуры, но не сказать что пешка может стать ферзем.
Человек, на основании своих базовых знаний, просто не сможет логически вывести такой вариант.
11.5.1 Locked Instructions as Memory Barriers
Optimization
Use locked instructions to implement Store/Store and Store/Load barriers.
Application
Applies to programs running on multicore processors or on multiple single core processors.
Rationale
On AMD family 15h processors, the SFENCE and MFENCE instructions are serializing. This stalls
the pipeline and the processor core cannot begin processing any further instructions until all previous
instructions are completed and any outstanding memory operations (such as prefetches and stores)
have completed. (This stall applies only to the individual integer unit of the compute unit where the
MFENCE or SFENCE instruction is executed.) Architecturally serializing instructions such as
CPUID have the same pipeline stall behavior as the MFENCE and SFENCE instructions. The
LOCKed instructions do not stall the pipeline and, thus, allow more instruction-level parallelism.
The C# Memory Model in Theory and Practice
The C# Memory Model in Theory and Practice, Part 2
Кэши процессора поделены на блоки (cache lines, CL),
для современных Intel I7 размер CL на всех уровнях (L1, L2, L3) равен 64 байтам.
MESI протокол работает в терминах CL. Из за этого может возникнуть эффект false sharing,
когда не связанные в исходном коде участки памяти занимают 1 CL:
если переменные l1 и l2 попали в одну CL, то запись в любую из них повлечет за собой MESI invаlidate.
Если поток 1 на CPU1 постоянно обновляет l1, а поток 2 на CPU2 постоянно обновляет l2, то производительность сильно упадет, поскольку оба CPU будут конкурировать за одну CL.
Позволю себе упомянуть свою статью на эту тему: False sharing в многопоточном приложении на Java.
Полезная презентация на тему настройки Net.
Использование VTune или его аналогов на других платформах, поможет оценить эффективность HPC приложения на уровне счетчиков CPU.