Каковы практические преимущества изучения блока?

Я не думаю, что это можно подтвердить внутри метода отправки. Вместо этого вы можете попробовать:

receiver.consumeManualAck("queue.A")
        .flatMap(ad -> {
           Mono<OutboundMessage> outboundMessageMono =
                Mono.just(new OutboundMessage("", "queue.B", ad.getBody()));
           return sender.send(outboundMessageMono)
                        .doFinally(signalType -> {
                            if (signalType == SignalType.ON_COMPLETE) {
                               ad.ack();
                            } else {
                               ad.nack(false);
                           }
                         });
         });
6
задан Click Upvote 7 January 2009 в 23:28
поделиться

14 ответов

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

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

Опытный разработчик мог бы записать тот же цикл и думать, "Этот код выполняет итерации по ряду целых чисел и должен упаковать каждый элемент для вызова метода ToString, и ToString должен отформатировать строку в основе 10, который несколько нетривиален, и затем и помещенное в коробку целое число и отформатированная строка будут скоро иметь право на сборку "мусора", поскольку никакие ссылки не останутся, и в первый раз этот метод выполнения, это должен будет быть JIT'ed..." и так далее.

9 раз из 10, это не может иметь значения. Но в тот 1 раз из 10, опытный разработчик, вероятно, заметит проблему в коде, который средний разработчик никогда не думал бы для рассмотрения.

7
ответ дан 8 December 2019 в 04:10
поделиться

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

5
ответ дан 8 December 2019 в 04:10
поделиться

Указатели/управление памятью являются более общими, чем ассемблер. Необходимо понять их для C и C++ также, в котором Вы, возможно, нуждались бы, если необходимо поддержать код, написанный в C.

Для ассемблера иногда полезно прочитать ассемблерный код, который компилятор C генерирует, чтобы узнать, генерирует ли это корректный и эффективный код.

4
ответ дан 8 December 2019 в 04:10
поделиться

Я думаю, что замечательно выучить новые языки. Это открывает мой ум. Некоторые языки являются большим количеством открытия ума, чем другие. Я сказал бы, что ассемблер является одним из тех. Это вынуждает Вас думать о материале как стек вызовов и указатель команд. И это заставит Вас ценить высокоуровневые языки еще больше. Другой забавный язык для изучения является PostScript.

3
ответ дан 8 December 2019 в 04:10
поделиться

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

2
ответ дан 8 December 2019 в 04:10
поделиться

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

3
ответ дан 8 December 2019 в 04:10
поделиться

Указатели и управление памятью являются действительно другим вопросом, чем блок. Если Вы хотите сделать C/C++, то необходимо изучить указатели и управление памятью, потому что это - часть языка. Но, даже если Вы планируете использовать, только (говорят), что Java всю свою жизнь, необходимо узнать что-то об управлении памятью для удержаний от записи утечки памяти несмотря на GC, и указатели являются просто различием между атомарными типами и ссылками на объект. Вам нужны понятия, или Вы запишете программы, которые не работают!

Практические причины изучения блока: отладка и оптимизация. Даже если Вы не пишете блока, на днях Вы, возможно, должны оптимизировать код C/C++ для производительности. В этом случае необходимо будет смочь считать блок для внутреннего цикла, даже если Вы никогда не должны писать другую строку его.

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

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

1
ответ дан 8 December 2019 в 04:10
поделиться

Но что я ищу, некоторые практические предложения, которые приложат усилие изучения блока для ценности того.

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

Но, не потрудитесь изучать, как записать блок: вместо этого, обучение записать C или C++ является, вероятно, достаточно 'низким' для наиболее практических целей.

1
ответ дан 8 December 2019 в 04:10
поделиться

В эти дни много ассемблеров являются довольно на самом деле высоким уровнем.

И это всегда было верно, что, если Вы изучаете 'C', это достаточно близко к блоку для извлечения большей части пользы изучения.

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

0
ответ дан 8 December 2019 в 04:10
поделиться

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

Приложение как win32Dasm может преобразовать исполняемые файлы в ассемблерный код, который может позже быть изменен с Hex-редактором как hiew. Можно узнать довольно много о потоке программы.

0
ответ дан 8 December 2019 в 04:10
поделиться

Ну, на практическом уровне я сделал класс в 6 502 ассемблерах, когда я сначала учился кодировать начало 80-х. Я также сделал приблизительно 8 088 ассемблеров. Это имело случайное применение лет с тех пор, но я не могу сказать, что это когда-либо действительно получало мой из дыры больше чем в одном или двух случаях за 25 лет. Groking C на довольно фундаментальном уровне имеет намного больше применения. YMMV и это, конечно, полезны как фон, но как прямое практическое преимущество? Крайний действительно.

Парадоксальным образом, хотя одна вещь, которая оказалась полезной, на еще более низком уровне. Я сделал класс на структуре кристалла (Логические элементы НЕ-И и т.п.) и поскольку части этого преподавали формальную Булеву логику на некоторой глубине. Это было в широком масштабе полезно с тех пор - это удивляет число кодеров, которые действительно не знают то, что они делают с ands, ors и nots :-)

0
ответ дан 8 December 2019 в 04:10
поделиться

Я думаю, узнавая об архитектуре ЭВМ в соединении блока, открыл бы Ваш ум вполне немного.

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

Кроме того, различная архитектура имеет свои причуды. Кто-то говорил о приеме блока для свопинга 2 регистров на месте, включая xor's. Это работает, и это работало бы большой за тем, чтобы ядро выполнения (новым примером будет Intel Atom, и Через C7 в нетбуках), но не настолько большой в неисправных ядрах.

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

0
ответ дан 8 December 2019 в 04:10
поделиться

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

0
ответ дан 8 December 2019 в 04:10
поделиться

У меня есть несколько практических примеров того, почему вам нужно знать, что находится под капотом. Вот некоторые полезные ссылки, которые могут оказаться полезными в этом контексте:

Сборка и искусство отладки

Отладка - Изменение кода во время выполнения

0
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: