Pull to refresh
33
0
Send message
89 долларов в год, это конечно сумма смешная за инструмент которым зарабатываешь. Но тут важна не сумма, а как это сделано. Это, как уже упоминали в треде, худший образчик «эффективного менеджмента». Рубанем шашкой и пусть платят или идут на все 4 стороны. Это не подход компании, которая заботится о своем имидже и лояльности клиентов. Что будет когда деньги снова начнут кончаться?

Игры с серверами активации я для себя не приемлю на 100%. Это бомба замедленного действия, и постоянный источник головной боли.

Поэтому проще постепенно переехать на другой инструмент, пусть он будет и не столь продвинут. Тем более что это всего лишь редактор текста. Да, очень продвинутый, очень удобный, но он не пишет код сам.
Это сильно меняет дело в худшую сторону. Я не готов к тому что мой рабочий инструмент может превратиться в любой момент в тыкву из за проблем с интернетом или серверами активации. Опять же, существует достаточно много организаций, где доступа в интернет нет и никогда не будет.
Уважаемый gorohoroh, могли бы вы прояснить сугубо технический вопрос:
нужно ли будет иметь постоянное подключение к интернету в рамках новой лицензионной политики или вы просто будете раздавать ключи ограниченные по времени?
Я бы еще добавил самой первой рекомендацией: Никогда не используйте нигде, кроме тщательно локализованных модулей взаимодействия с legacy данными и низкоуровневыми протоколами.
В библиотеке javolution есть класс Struct для работы с такого типа данными.
Особенность profile optimization, похожий баг.

$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

$ java App
0.039184857     2.360865017
0.038515955     1.953248084
0.033702157     1.955458985
0.033699063     1.953420415
0.03370587      1.952605481
0.033703395     1.956728721
0.033702775     1.954714283
0.033710201     1.954150574
0.033706178     1.95341268
0.033711439     1.952654055

$ java -XX:MaxTrivialSize=50 App
0.039914707     0.01686856
0.045489296     0.033697825
0.033701847     0.033747329
0.033702776     0.033704942
0.03370061      0.033698754
0.033699992     0.033697207
0.033698135     0.033700919
0.033698445     0.033698135
0.033698135     0.033699373
0.033708345     0.033699682
Тут мы вступаем на зыбкую почву «эффективности». По сути, даже код на ассемблере, в какой то мере абстракция. Ниже лежит процессор со спекулятивным исполнением команд, branch predictor, декодеры команд, scheduler микрокоманд, иерархическая модель памяти + NUMA и т.д. Чем выше уровень абстракций — тем быстрее можно получить работающий софт. Но вот вычислить этот максимально допустимый уровень и есть основная задача.
В случае java, за этими несколькими строчками кода, будет еще jit компилятор с profile optimization со своими правилами и багами. Что может сказать человек претендующий на junior позицию в этом случае?
Ключевое слово здесь «premature». После того как выбраны алгоритмы, система написана и обладает необходимой функциональностью, есть тесты и измерена производительность на реальных данных и не хватает этих самых 12%, вот тогда можно приступать к такого рода оптимизации. Заниматься этим до — значит просто терять время и тормозить проект.
Выбор, мягко говоря, неудачный. Это все равно что дать человеку решать шахматную задачу,
рассказать как ходят фигуры, но не сказать что пешка может стать ферзем.
Человек, на основании своих базовых знаний, просто не сможет логически вывести такой вариант.
Premature optimization is the root of all evil — Donald Ervin Knuth
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.

Позволю себе упомянуть свою статью на эту тему: False sharing в многопоточном приложении на Java.
При bulk операциях полезно увеличить SDU и поменять настройки TCP.
Полезная презентация на тему настройки Net.
В клонированную изменения не попадут. При изменении блока на ACFS он сначала будет добавлен к снапшоту.
Параллельная обработка на базе Storm framework. Я о нем писал на хабре.
Совершенно верно, в 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.
В этом случае можно воспользоваться декораторами для приведения интерфейса к стандартному интерфейсу коллекций.

Information

Rating
Does not participate
Registered
Activity