[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] [C++]



Robert Larsen wrote:
> <KLIP>
>
> Well...hvis du låser adgangen til modulets funktioner, så behøver koden
> ikke at være reentrant, men der kan stadig være tråd problemer hvis
> modulet afhænger af nogle ressourcer, som andre tråde kunne finde på at
> bruge, så jeg kan ikke se, at det ville løse noget problem.

Modulerne skal som udgangspunkt ikke have adgang til funktioner på serveren.
Modulopbygningen er tænkt som:

1) Her har du noget data fra en klient... behandle det.
2) Hiv data ud af modulet, hvis der er noget, og send det tilbage til
   klienten.

Et "Push & Pull" koncept.

Modulet skal så holde styr på ind/ud data ved hjælp af et klient id som
bliver givet ved kaldet til modulet.

>> 2) Overlade det til programmøren af modulet at være thread-safe...
>>    og derved at være lidt i det uvisse om modulet ligger serveren ned
>>    på den bekostning. Det bliver også meget svære at skrive moduler
>>    til serveren.
>>   
> That's life :-)

Ja, jeg ved godt det er en del af livet, Men, det ville være rart hvis det
kunne lade sig gøre uden at, personen som skriver modulet skulle tænke på
Mutex, ReadWriteLocks mv. 

>> 3) Eller er det bare mig som ikke pt. har set lyset og der er en meget
>>    bedre måde at gøre det på...
>>
> Det er lidt svært at svare på generelt, men jeg plejer at løse
> multithreading issues ved at "single threade" mine applikationer.
>
> Basalt set bruger jeg to thread pools. Én (min 'main' thread pool) har
> kun én tråd, og en anden (min 'worker' thread pool) har flere. Worker
> thread poolen bruges til at kalde funktioner, som kan tage lang tid at
> udføre, og må ikke røre de samme ressourcer som min 'main' thread pool.
> Min 'main' pool udfører langt det meste af min kode, men når den når til
> et punkt, hvor den f.eks. skal kalde en blokerende funktion, så
> overlader den det til 'worker' poolen, og når resultatet så foreligger,
> lader 'worker' poolen så 'main' poolen overtage resultatet og den videre
> behandling.
> På den måde er det kun én tråd (den i 'main' thread poolen) som tilgår
> mine ressourcer.

Noget i den retning jeg kort har beskrevet oven for.

En af problemerne ligger i at man, mig bekendt, kun kan have en instans af
et dynamisk modul "*.so"  i et program. Når der så er flere tråde til at
behandle klienter... ja, så har modulerne det meste af arbejdet. Også med
at beskytte deres data.

Lad tage et eksempel: FTP server

1) Har meget netværk trafik sende/modtage. 1-N tråd til at tage sig af
   dette.
2) Meget disk IO skrive/læse. 1-N tråd til at tage sig af dette, alt
   afhængig af disk strukturen.
3) Mange klienter som forbinder til serveren. Main loop tager sig af dette.
   Finder den bedst tråd at putte klienten i... hvis der ikke er plads til
   flere i nogen af trådene. Start en ny tråd... indtil højest antal
   forbindeler er nået.

Hvis man så fjerner FTP står der server. Og i stedet for "kun" at tilbyde
filer data så også tilbyder data fra en database, system information mv.
via moduler, ja, så har jeg et problem. For nu er der en del tråde som skal
snakke med modulerne.

Nettrafikken kunne man vel bruge en queue til hhv. ind/ud data. Og så have
en tråd til at sende data ind/ud af modulerne. Så, er problemet bare at
nogle moduler kan være længe om at frembringe data og derved venter andre
moduler. Man kunne så have en tråd per modul... men det tror jeg ikke
holder i længden.

Det er også en hel anden snak end det jeg startede med. Så der må jeg vist
starte en ny tråd :)

Når alt kommer til alt så ville du have modulet til at beskytte sig selv. Og
så håbe på at det bliver gjort på en optimal måde. Er der brug for en tråd
så ville du lade modulet gøre dette. Er det ikke rigtigt forstået ?


(John =;-)












 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2008-01-01, 17:38 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *