Nowe posty

Autor Wątek: libfuse i wielowątkowość  (Przeczytany 236 razy)

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 103
    • Zobacz profil
libfuse i wielowątkowość
« dnia: 2023-10-30, 14:11:06 »
Zależy mi na napisaniu własnego systemu plików, co byłby interaktywny (coś, jakby KIO-Polkit czy UAC).

Problem jest taki, że python3-pyfuse ma problemy z obsługą wątków w niektórych implementacjach Pythona. W OpenSUSE akurat ma.
Są też inne moduły pythona dla fuse, ale są inne problemy, np. nie mogą być równocześnie zainstalowane z python-pyfuse.

Stąd postanowienie o przepisaniu na C. I stąd moje pytanie - jak wygląda kwestia wielowątkowości lub asynchroniczoności. Szukałem w dokumentacji i jest np. id sesji, ale do jego otrzymania, trzeba podać obiekt fuse, który nie jest przekazywany do funkcji-operacji-fuse.

Zależałoby mi czymś takim:

void callback_fuse(int identyfikator_żądania) {
    int fd = wywołujemy_helpera_przekazując_np_ścieżkę_do_pliku
   dodaj_deskryptor_pliku_i_id_żądania_do_pętli(fd, identyfikator_żądania)
}

// Pętla główna
while (1) {
   poll(deskryptory_plików_poll, ilość_deksryptorów, -1);
   int i;
  for (i = 0; i < ilość_deskryptorów; ++i) {
      if (deskryptory_plików_poll[i].revents) {
         int result = obsłuż_helpera(deskryptory_plików[i],&deskryptory_plików_poll[i])
         zwróć_resultat(id_żądań, result);
      }
   }

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3014
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: libfuse i wielowątkowość
« Odpowiedź #1 dnia: 2023-10-30, 16:07:51 »
Fuse nie jest dostosowany do osadzania go w innych aplikacjach (mam wrażenie, że to chcesz uzyskać). Ma własną, zamkniętą pętlę obsługi eventów. Filesystem serwowany z Fuse jest zamkniętą, samodzielną aplikacją.

1. Fuse sam z siebie obsługuje MT: zamieniasz  fuse_loop() na odpowiednie fuse_loop_mt_XX() i wtedy handlery wykonywane są współbieżnie na puli wątków. Jak twórcy piszą: "z pętlą MT cieszysz się wykonaniem współbieżnym oraz dodatkowo wyścigami i zakleszczeniami". Wszystkie handlery muszą być bezpieczne wątkowo.

2. Każde zapytanie Fuse jest zasadniczo samodzielnym bytem. Jeżeli potrzeba kontekstu, jest on globalny dla danej aplikacji realizującej Fuse.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy