Pierwsza z brzegu integracja:
http://wiki.glassfish.java.net/Wiki.jsp?page=QuartzGlassFish
Sławomir Sobótka
http://art-of-software.blogspot.com
W projekatch, które widziałem do schedulingu stosowano albo quartza
albo timery ejb3. Oba rozwiązania dawały radę. Jeśli chodzi o wątki i
przetwarzanie asynchroniczne, to pracowałem z jednym rozwiązaniem
opartym o JMS i też nie było żadnych niespodzianek.
--
Maciej Zubala
QDev - jakość oprogramowania
http://www.qdev.com.pl
Timer EJB daje radę przy prostych planach ponieważ jego API jest
bardzo "podstawowe". Do tego w standardzie np do zainicjalizowania
samego timera trzeba sie nagimnastykować;P
Pytanie czy warto wchodzić w bardziej złożona api jakiejs zewnatrznej
biblioteki?
Decyzja powiedziałbym strategiczna... z czasem pojawia sie plany
bardziej złożone i używanie Timera będzie wiązało się z bólem. Do tego
nikt nie podejmie decyzji przepisania - bo działa;P
> Jeśli chodzi o wątki i
> przetwarzanie asynchroniczne, to pracowałem z jednym rozwiązaniem
> opartym o JMS i też nie było żadnych niespodzianek.
Ogólnie to używanie własnych wątków w aplikacjach na serwerze JEE jest
błędem w sztuce. Zależnie od servera posypie się w mniej lub bardziej
finezyjny sposób. No albo sie nie posypie i na jakimś konkretnym
serverze będzie działać:)
Wątkami zajmuje sie "platforma" a developer korporacyjny nie musi nic
o nich nawet wiedzieć;P
Co do JMS to dodam ciekawostkę, że można na niektórych serverach
wymusić istnienie kilku instancji danego Message Driven Beana
podłączonego do kolejki/topiku i każdą z nich przypisać do rdzenia
procesora aby osiągnąć wydajne asynchroniczne przetwarzanie
komunikatów.
Sławomir Sobótka
http://art-of-software.blogspot.com
Z tym, że bez zrównoleglenia kod ten wykona się w dużym stopniu na
jednym wątku (powiedziałbym, że większość - choć nie wszystkie ;-) -
serwerów aplikacyjnych wykona go w całości na jednym wątku). No i
wykona się sekwencyjnie.
Chciałbym zapytać odnośnie JSE, w kontekście zwykłej aplikacji
standalone - po prostu od jakiegoś czasu zastanawiam się tworzyć
pewien soft na starym, dobrym desktopie:)
Chodzi mi o wydajność, a dokładnie o wykorzystanie potencjału
wielordzeniowych procesorów. Wszystko w kontekście systemu Microsoftu.
Czy jeżeli w moim programiku będzie kilka wątków to czy zostaną
potencjalnie wykonanie równolegle na kilku rdzeniach?
Z tego co wiem to jeszcze jakiś czas temu pod HotSpot Suna dla Windows
obsługiwał wątki Javy "sztucznie". Czyli tak na prawdę po stronie
Windowsa był to jeden wątek (albo proces?), a JVM jedynie przełączał
swoje wewnętrzne wątki na ten jeden systemowy. Jeżeli tak, to OS nie
miał szans sobie tego rozłożyć na rdzenie.
Czy w dalszym ciągu tak to wygląda, a jeżeli tak to kiedy może się to zmienić?
Pytanie dosyć podstawowe, ale nie mogę od dłuższego czasu znaleźć
jasnej i jednoznacznej odpowiedzi.
z poważaniem
Sławek Sobótka
http://art-of-software.blogspot.com
Niestety, do bytecode'u nie trafiają informacje z czasu kompilacji, a i metadane w
postaci adnotacji są dosyć ograniczone (bardzo liczę na Java 7, gdzie
miejsc do wstawienia adnotacji będzie więcej - choć chyba jeszcze się
nie zdecydują na wprowadzenie adnotowania bloków instrukcji ani
pojedynczych instrukcji, a to byłby idealny mechanizm pomagający
optymalizatorowi kodu w JVM)... Takie rozwijanie pętli trzeba też
oszacować, czy się opłaca robić - więcej nadziei pokładam w ręcznym
przekazywaniu tych informacji przez dewelopera (ewentualnie przez
narzędzia w rodzaju IDE czy profiler) niż samodzielne ich wyłuskiwanie
przez kompilator bytecode'u w JVM - on i tak ma dosyć utrudnione
zadanie
GC tu chyba niewiele wnosi (większość języków programowania ma GC,
począwszy od Lispa z lat 70-tych). Algorytmy cache-oblivious to jedno,
ale wcześniej przydałoby się trochę więcej możliwości sterowania na
poziomie cache - pamięć. Tu znowu "winnym" są mainstream'owe CPU
W implementacji JRockit dla takiego IA64 (Itanium) rzeczy w rodzaju
spekulatywny odczyt danych, czy optymalizacje sterowane danymi
profilingowymi zbieranymi przez CPU (Profile Guided Optimizations) są
robione. Xeon'y ich nie mają (jeszcze ;-) ?).
Na pewno jest to sensowny pomysł, choć trzeba chyba poczekać na
upowszechnienie się serwerów w które włożono przyzwoite GPU (chicken-
egg problem do ponownego rozwiązania). Osobiście wątpię też, żeby
ktokolwiek inny niż Intel był w stanie popchnąć branżę w tę stronę (a
Larrabee się chyba znowu opóźni...) .
Sporo też jeszcze zostało do zrobienia w JVM, aby korzystały one z
instrukcji typu SIMD dostarczanych przez rozszerzenia w rodzaju SSE.
Często są one znacznie szybsze niż stosowe czy pochodzące z x87. A i
dodatkowe rejestry SSE (które są i szybkie, i pojemne, i jest ich
stosunkowo dużo) bardzo pomagają.