catpad: (Default)
[personal profile] catpad

Я уже очень давно написал совсем маленькую библиотеку на Java, которая называется InfoBus и позволяет множеству threads (здесь я их называю service threads) асинхронно посылать друг другу сообщения.
Звучит просто, даже слишком, но библиотека эта оказалась настолько полезной и универсальной, что я таскаю её за собой из проекта в проект и с одной работы на другую уже много лет (постепенно изменяя по ходу дела), и вообще не представляю, как можно какую-либо multithreading-программу написать на Java без неё. В общем, я наконец-то собрался сделать для неё документацию и примеры и выложил на сайт.

Конечно же, подобные библиотеки наверняка существуют, но эта моя собственная, и она мне очень нравится. Я использовал её уже в четырёх проектах - двух GUI, одном сервере, который работает с китайской биржей и одном proxy-сервере, который нужен мне для программы визуализации, о которой я как-то уже писал.

Библиотека основана на трёх основных принципах:
1) Service threads никогда не блокируют друг друга;
2) Они всегда спят, когда нет работы;
3) Работа появляется, когда один из сервисов посылает другому communication queue item. Этот-то item и заключает в себе логику программы, которая должна выполняться в контексте того service thread, которому послано сообщение.
Таким образом, сами service threads "ничего не знают" о той работе, которую они выполняют - они просто просыпаются, когда обнаруживают очередной item в своей очереди, вызывают его метод execute и засыпают дальше.
(И ещё у service thread работает failover: если один из сервисов вдруг упал, он будет тут же запущен снова).

Всё это и в самом деле ужасно просто, но тем-то оно и сильно! Призываю всех, кто пишет на Java, попробовать. Подробное описание, API и download здесь.
Там же есть и простые примеры. Вчера я сделал пример "обедающих философов" и прокрутил для 1000 философов (то есть 1000 service threads). Работает всё очень хорошо.

Напишите мне, если кто-то будет пользоваться!

Про философов

Date: 2007-04-03 06:06 am (UTC)
From: [identity profile] gianthare.livejournal.com
Я правильно понимаю, что у тебя решение без livelock, но со starvation?

Profile

catpad: (Default)
catpad

October 2022

S M T W T F S
      1
234 5678
9101112131415
16171819202122
23242526272829
3031     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 19th, 2025 07:27 am
Powered by Dreamwidth Studios