2010-01-28 2 views
2

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

  • NIO Трубы
  • События (регистрирующие слушателей)
  • очереди транзакций в контексте приложения

Мой вопрос, Какой из них лучше избегая узких мест и замков? Или есть альтернатива, которую вы можете посоветовать?

+0

Я не знаю, почему кто-то проголосовал за это. Это реальный вопрос. Он спрашивает о компромиссах между различными механизмами связи Java и изучил некоторые альтернативы. Кажется верным мне. –

+0

Недостаточно информации, чтобы дать осмысленный совет. Являются ли эти приложения в одной JVM, одной машине, разных машинах в локальной сети и т. Д.? Являются ли приложения транзакционными? Нужно ли им сотрудничать в транзакциях? Какие примитивы обмена поддерживают фреймворк: RPC, асинхронный обмен сообщениями, потоки данных? Какие примитивы синхронизации? –

+0

Я думаю, что примеры, которые я дал, говорят сами за себя; трубы, события ... это всего лишь два примера связи. Например, позволяет предположить, что у меня есть один основной класс и объект-менеджер. требуется двухсторонняя связь: основной класс представляет буфер для объекта-менеджера для обработки и продолжает выполняться, когда процесс завершается в менеджере, результат отправляется в основной класс. я могу использовать каналы для отправки и получения данных или может уведомить зарегистрированных слушателей с прикрепленным результатом объекта события, или я могу выставить ожидающий буфер из очереди ожидания, обработать его и сохранить в очереди результатов. –

ответ

0

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

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

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

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

В-четвертых, не стоит недооценивать внутренние преимущества использования рамки, которую используют многие другие люди; например сообщество, чтобы задавать вопросы (например, на SO), сообщество для улучшения структуры, трудоустраиваемых людей с рамками их резюме.

Наконец, реализуя свою собственную инфраструктуру, вы, скорее всего, создаете много дополнительных будущих работ по техническому обслуживанию команды/компании. Вы ошибаетесь, и ваши коллеги будут проклинать вас в коридорах в течение следующих 10 лет. Даже если вы получаете право на 100% прав, кто-то из вашей организации все равно должен поддерживать его на всю жизнь приложений, зависящих от него.

+0

im студент на самом деле. framework, который я разработал, является api для реализации серверов, которые будут сосредоточены на одной работе. Я знаю, о http-реализации и cdns. Я уже писал почти все. после прочтения того, что вы написали, я решил использовать osgi для модуляции. мой сервер использует каналы и селекторы для чтения запросов, а затем передает их на http-интерпретатор в качестве ключа выбора. когда сервер генерирует ответ, он возвращается клиенту. я не мог найти способ отправить ответ, но похоже, когда ответ готов. похоже, что все, что мне нужно было сделать, это установить ключи для записи. thnx –

+0

Не у всех, у кого программы есть босс, или они не видят «веселья» в качестве веской причины делать что-то. –

+0

@Bart - OP явно не делает этого для удовольствия. На данный момент у него может быть или нет босса, но он, безусловно, должен учитывать последствия совершения чего-то, что может сорвать его проект. В этом случае следствием может быть то, что он не прошел свой курс.Кроме того, в качестве студента он также должен учиться думать с мышлением профессионального разработчика/менеджера. Наконец, он попросил совета по альтернативам, и «использовать существующую структуру» - лучшая альтернатива. –

2

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

Жаль, что вы выбросили с помощью фреймворков, большинство из них были бы значительно быстрее, полнее и удобнее, чем все, что вы могли бы написать сами. Тот, кто придумал это требование, должен быть встречен и, возможно, уволен.

+0

и более сложный и громоздкий :) Мне просто нужен простой механизм –

+0

Хотя я понимаю ваше нежелание изучать структуру, которая, кажется, имеет множество функций, я всегда находил, что, когда я не думал, что мне нужны функции так как это связано с тем, что я не потратил столько времени на понимание проблемы, как разработчики фреймворка - в конечном итоге вам придется реализовать эти функции в своей собственной структуре. –

1
i am developing a framework for creating efficient applications in all sizes 

Чтобы дать очень общий совет, который я хотел бы предложить вам погрузиться в исходный код JBoss, чтобы получить представление, как вещи сделаны, когда они должны работать (возможно, самую старую версию вы можете получить, как запуск точка)

3

Мое единственное, что мы посоветуем, не идет так. Как уже сказал Билл К, большинство реализаций будут значительно быстрее и полнее. Еще важнее то, что есть отличные ресурсы для достижения того, что вы пытаетесь сделать: OSGi, например, с Eclipse и Glassfish v3 под своим поясом.

Лично я реализовал нечто похожее на ваше описание, загружая плагины во время выполнения без необходимости перезапуска контейнера. Это был кошмар для поддержания и отладки. И что более важно, хотя для меня было относительно легко реализовать новые модули (в конце концов, я разработал эту вещь), было очень сложно программировать. В конце концов я много узнал о загрузчиках классов, но все.

+1

+1 - для первого предложения. ОСОБЕННО, так как вы должны задать такой вопрос в первую очередь !!! –

+0

+1 Я тоже это сделал, это было причиной указывать рабочие примеры, где дела уже сделаны. – stacker

+0

@stacker - мы даже не знаем, спрашивает ли OP о веб-материалах, так как мы знаем, какие примеры актуальны? –