🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217061

Re: Integracja bibliotek event-based

#217061
From: Mateusz Viste
Date: Thu, 11 Jun 2020 08:37
57 lines
3546 bytes
2020-06-10 o 14:19 -0700, Maciej Sobczak napisał:
> Jest gorzej. To nie muszą być sockety. Np. system QNX ma fajny
> mechanizm komunikacji IPC, który istnieje poza przestrzenią
> deskryptorów plików. A ktoś inny będzie się komunikował przez pamięć
> dzieloną.

Trzymajmy się założeń: była mowa o bibliotece "do http", innej "do
tweetera" i trzeciej "baza danych". Każda z nich raczej (?) opiera się
na socketach.

> No i nie możemy zakładać, że socket jest jeden, albo że ciągle ten
> sam, itd. Straszne komplikacje.

Jeśli jest ten sam to komplikacji nie ma - jeśli się urywa to
biblioteka zwraca błąd i trzeba zainicjalizować na nowo. Jeśli
natomiast socket się tworzy nowy przy każdym zawołaniu (np. sprawdzanie
tweetów via nową sesję ssl za każdym razem), to każde sprawdzenia
powinno być regularnie wywoływane przez program.

> dodatkowy argument, żeby czekać. Tak jest w YAMI4. Wtedy pętla
> użytkownika nie musi być busy - po prostu blokuje się, jak nie ma nic
> do roboty.

Po bardzo pobieżnym przejrzeniu rozumiem to tak, że inspirel oczekuje
że stworzysz swój własny wątek specjalnie dla wołania ich biblioteki:

 "All activity has to be driven by the application, which is supposed to
  'lease' one of its threads for doing the I/O work on behalf of the
  agent. This is achieved by calling the Do_Some_Work procedure in Ada
  or the do_some_work function in C++.

  The 'do some work' routine performs a single unit of work and
  returns to the caller. In a typical application it will be called in
  a tight loop."

W takiej sytuacji niewiele można zrobić. Patrz niżej.

> > Ale to tylko jeśli biblioteki faktycznie nie udostępniają
> > jakichkolwiek mechanizmów sygnalizacji swoich potrzeb.  
> 
> Dobry trop.
> To w jaki sposób chciałbyś być poinformowany, że biblioteka ma
> potrzebę?
> 
> Przypominam, że mamy 3 biblioteki. Przyjmijmy wersję idealną, że
> wszystkie 3 będą mieć ten mechanizm. Jaki?

Idealnie? No to chcę sam obsługiwać kanał danych (socket, IPC,
whatever), a bibliotekę będę wołał tylko po to, żeby te dane
obrobić/przetłumaczyć. Alternatywnie - niech biblioteka da dostęp do
socketów, wówczas wiem, że jak coś się zmieni na kablu to powinien
zawołać kogoś do obsługi. Ostatnia opcja: niech biblioteka da jakiś
swój blokujący "wait_for_event()", sama niech blokuje w sposób
eko-mądry i zależny od implementacji, a ja sobie ją wywołam w osobnym
wątku. 3 biblioteki = 3 wątki, da się przeżyć.

Mateusz
Technical Details
Message-ID: <20200611103732.69e48f11@mateusz>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.man.lodz.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!news.uzoreto.com!aioe.org!.POSTED.nyPK7k8oeDafdNpooDsxZQ.user.gioia.aioe.org!not-for-mail
References: <5d642286-413d-47db-91b0-c689bbe167f4o@googlegroups.com> <20200609094640.04ee0ae2@mateusz> <aa97820e-825e-4efe-b403-2c1f496dc7ffo@googlegroups.com> <20200610105625.30b3dad0@mateusz> <e642682f-3296-4377-85b1-4c7dee0359b4o@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.man.lodz.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!news.uzoreto.com!aioe.org!.POSTED.nyPK7k8oeDafdNpooDsxZQ.user.gioia.aioe.org!not-for-mail
From: Mateusz Viste <mateusz@xyz.invalid>
Newsgroups: pl.comp.programming
Subject: Re: Integracja bibliotek event-based
Date: Thu, 11 Jun 2020 10:37:32 +0200
Organization: . . .
Lines: 78
Message-ID: <20200611103732.69e48f11@mateusz>
References: <5d642286-413d-47db-91b0-c689bbe167f4o@googlegroups.com> <20200609094640.04ee0ae2@mateusz> <aa97820e-825e-4efe-b403-2c1f496dc7ffo@googlegroups.com> <20200610105625.30b3dad0@mateusz> <e642682f-3296-4377-85b1-4c7dee0359b4o@googlegroups.com>
NNTP-Posting-Host: nyPK7k8oeDafdNpooDsxZQ.user.gioia.aioe.org
Mime-Version: 1.0
X-Complaints-To: abuse@aioe.org
X-Notice: Filtered by postfilter v. 0.9.2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit