eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Struktura do przydzielania numerków
Ilość wypowiedzi w tym wątku: 25

  • 1. Data: 2015-12-04 15:04:25
    Temat: Struktura do przydzielania numerków
    Od: Borneq <b...@a...hidden.pl>

    Każdy zasób określony jest przez numer z zakresu <a,b), bez miany
    ogólności możemy przyjąć że zakres jest <0,n) gdzie n=b-a.
    N jest duże, np. dwa miliony, więc nie ma obaw że zabraknie zasobów, n
    to ilość ile może być zasobów JEDNOCZEŚNIE. Ale gdy zwolnimy jakiś
    zasób, jego numer może zostać przydzielony znowu.
    Choć duże n, to może się skończyć, gdy będziemy przydzielać, zwalniać i
    zwiększać k.
    Są dwie strategie: albo przydzielać zawsze najniższy wolny numer, albo
    cały czas inkrementować k, przydzielać najwyższy numer, aż gdy k
    osiągnie n, wtedy zawinie się od początku. Jak jest lepiej?
    Jaka struktura? Czy trzymać listę raczej wolnych czy raczej zajętych
    numerów? Gdy będzie mało wykorzystane, oszczędniej trzymać raczej listę
    zajętych, ale listę wolnych może lepiej szukać?
    Dodatkowo potrzebne jeszcze mutexy, aby nie przydzielić dwa razy tego
    samego numeru przy pracy na wątkach.
    Jaka struktura i algorytm wydajnie wyszuka wolny numer?


  • 2. Data: 2015-12-04 15:16:40
    Temat: Re: Struktura do przydzielania numerków
    Od: Adam M <a...@m...com>

    Do trzymania informacji o zajetych numerach (zasobach) nie potrzeba zadnej listy -
    wystarczy int lub long int. Kazdy bit identyfikuje zajety zasob. Binarne sprawdzanie
    zajetosci bitu. Jesli system ma bardzo malo pamieci trzeba sobie jakos radzic - lista
    zjadla by cale zasoby ;-)

    Do wyszukiwania wolnego miejsca - wyszukiwanie polowkowe i rolowanie bitow w prawo
    lub lewo jak kto woli ;-)

    On Friday, December 4, 2015 at 9:04:17 AM UTC-5, Borneq wrote:
    > Każdy zasób określony jest przez numer z zakresu <a,b), bez miany
    > ogólności możemy przyjąć że zakres jest <0,n) gdzie n=b-a.
    > N jest duże, np. dwa miliony, więc nie ma obaw że zabraknie zasobów, n
    > to ilość ile może być zasobów JEDNOCZEŚNIE. Ale gdy zwolnimy jakiś
    > zasób, jego numer może zostać przydzielony znowu.
    > Choć duże n, to może się skończyć, gdy będziemy przydzielać, zwalniać i
    > zwiększać k.
    > Są dwie strategie: albo przydzielać zawsze najniższy wolny numer, albo
    > cały czas inkrementować k, przydzielać najwyższy numer, aż gdy k
    > osiągnie n, wtedy zawinie się od początku. Jak jest lepiej?
    > Jaka struktura? Czy trzymać listę raczej wolnych czy raczej zajętych
    > numerów? Gdy będzie mało wykorzystane, oszczędniej trzymać raczej listę
    > zajętych, ale listę wolnych może lepiej szukać?
    > Dodatkowo potrzebne jeszcze mutexy, aby nie przydzielić dwa razy tego
    > samego numeru przy pracy na wątkach.
    > Jaka struktura i algorytm wydajnie wyszuka wolny numer?


  • 3. Data: 2015-12-04 15:19:25
    Temat: Re: Struktura do przydzielania numerków
    Od: Borneq <b...@a...hidden.pl>

    W dniu 2015-12-04 o 15:04, Borneq pisze:
    > Jaka struktura i algorytm wydajnie wyszuka wolny numer?

    Nasuwa się struktura bitowa, choć dużo numerów, to tylko po bicie na
    jeden. Gdy dużo wolnego, to szybko znajdzie wolne, gdy prawie cała
    zajęta będzie musiał przeszukiwać tablicę aby znaleźć zero.
    Może to zależeć od aktualnej liczy użytych:
    - gdy mało użytych - wtedy lista użytych
    - gdy dużo,ale mniej niż np. połowa - tablica bitowo
    - gdy więcej niż połowa - lista wolnych



  • 4. Data: 2015-12-04 15:51:12
    Temat: Re: Struktura do przydzielania numerków
    Od: Adam M <a...@m...com>

    Dlaczego struktura bitowa raczej unia struktory bitowej z odpowiadajacym unsigned int
    lub unsigned long - to jest standardowe rozwiazanie np przy programowaniu MCUs
    Aby znalezc wolny bit niezaleznie od zajetosci potrzeba cztery podzialy 32, 16, 8, 4
    i 4 rolowania w najgorszym przypadku przy 32 bit int i 5 podzialow i 4 rolowania
    przy 64 bit long.

    On Friday, December 4, 2015 at 9:19:18 AM UTC-5, Borneq wrote:
    > W dniu 2015-12-04 o 15:04, Borneq pisze:
    > > Jaka struktura i algorytm wydajnie wyszuka wolny numer?
    >
    > Nasuwa się struktura bitowa, choć dużo numerów, to tylko po bicie na
    > jeden. Gdy dużo wolnego, to szybko znajdzie wolne, gdy prawie cała
    > zajęta będzie musiał przeszukiwać tablicę aby znaleźć zero.
    > Może to zależeć od aktualnej liczy użytych:
    > - gdy mało użytych - wtedy lista użytych
    > - gdy dużo,ale mniej niż np. połowa - tablica bitowo
    > - gdy więcej niż połowa - lista wolnych


  • 5. Data: 2015-12-04 16:17:10
    Temat: Re: Struktura do przydzielania numerków
    Od: Borneq <b...@a...hidden.pl>

    W dniu 2015-12-04 o 15:51, Adam M pisze:
    > Dlaczego struktura bitowa raczej unia struktory bitowej z odpowiadajacym unsigned
    int lub unsigned long - to jest standardowe rozwiazanie np przy programowaniu MCUs
    > Aby znalezc wolny bit niezaleznie od zajetosci potrzeba cztery podzialy 32, 16, 8,
    4 i 4 rolowania w najgorszym przypadku przy 32 bit int i 5 podzialow i 4 rolowania
    przy 64 bit long.

    Jak wykonywać te podziały? zwykle przy połowie słowa liczy się tylko to
    młodsze.
    czy będzie to tak a wewnątrz procedura inline szukaj_przesuwajac
    używająca << maksymalnie 4 razy?
    uint32_t mask
    if(mask)
    {
    if (mask & 0x0000ffff) //16 młodszych
    {
    if (mask & 0x000000ff) //8 najmłodszych
    {
    if (mask & 0x0000000f) szukaj_przesuwajac
    else szukaj_przesuwajac
    }
    else
    {
    if (mask & 0x00000f00) szukaj_przesuwajac
    else szukaj_przesuwajac
    }
    }
    else
    {
    if (mask & 0x00ff0000) //8 najmłodszych
    {
    if (mask & 0x000f0000) szukaj_przesuwajac
    else szukaj_przesuwajac
    }
    else
    {
    if (mask & 0x0f000000) szukaj_przesuwajac
    else szukaj_przesuwajac
    }
    }
    }


  • 6. Data: 2015-12-04 17:21:04
    Temat: Re: Struktura do przydzielania numerków
    Od: "M.M." <m...@g...com>

    On Friday, December 4, 2015 at 3:04:17 PM UTC+1, Borneq wrote:
    > Dodatkowo potrzebne jeszcze mutexy, aby nie przydzielić dwa razy tego
    > samego numeru przy pracy na wątkach.
    Nie bardzo mam czas, podpowiem tylko, że nie są konieczne do tego
    muteksy.



  • 7. Data: 2015-12-04 17:31:46
    Temat: Re: Struktura do przydzielania numerków
    Od: Adam Klobukowski <a...@g...com>

    Najlepsze rozwiązanie tego problemu z jakim się spotkałem to pamiętanie największego
    dotąd przyznanego numeru i posortowanej listy zwolnionych numerów.

    AdamK


  • 8. Data: 2015-12-04 18:13:00
    Temat: Re: Struktura do przydzielania numerków
    Od: "M.M." <m...@g...com>

    On Friday, December 4, 2015 at 5:31:48 PM UTC+1, Adam Klobukowski wrote:
    > Najlepsze rozwiązanie tego problemu z jakim się spotkałem to pamiętanie
    największego dotąd przyznanego numeru i posortowanej listy zwolnionych numerów.
    >
    > AdamK

    Nie wierzę że nie spotkałeś się z lepszym :)


  • 9. Data: 2015-12-04 19:58:22
    Temat: Re: Struktura do przydzielania numerków
    Od: Adam M <a...@m...com>

    On Friday, December 4, 2015 at 11:31:48 AM UTC-5, Adam Klobukowski wrote:
    > Najlepsze rozwiązanie tego problemu z jakim się spotkałem to pamiętanie
    największego dotąd przyznanego numeru i posortowanej listy zwolnionych numerów.
    >
    > AdamK

    Po pierwsze przepraszam za uzywanie angielskich zwrotow ale w pracy od kilkunastu lat
    uzywam wylacznie jezyka angielskiego wiec nie znam polskich odpowiednikow niektorych
    zwrotow.

    Twoj pomysl bedzie dzialal dobrze tylko w systemie w ktorym task churn (duzo zadan
    jest uruchamainych i szybko zamykanych w losowych odstepach czasu) jest niewielki i
    nie wystepuje tzw. task attack lub inaczej task ramp-up effect (bardzo duzo zadan
    jest uruchamianych bardzo szybko po sobie przy niewielkiej ilosci zadan zwalnianych -
    stosunek zadan uruchamainych do zwalnianych jest bardzo niekorzystny)


  • 10. Data: 2015-12-04 20:10:59
    Temat: Re: Struktura do przydzielania numerków
    Od: Adam M <a...@m...com>

    On Friday, December 4, 2015 at 10:17:02 AM UTC-5, Borneq wrote:
    > W dniu 2015-12-04 o 15:51, Adam M pisze:
    > > Dlaczego struktura bitowa raczej unia struktory bitowej z odpowiadajacym unsigned
    int lub unsigned long - to jest standardowe rozwiazanie np przy programowaniu MCUs
    > > Aby znalezc wolny bit niezaleznie od zajetosci potrzeba cztery podzialy 32, 16,
    8, 4 i 4 rolowania w najgorszym przypadku przy 32 bit int i 5 podzialow i 4
    rolowania przy 64 bit long.
    >
    > Jak wykonywać te podziały? zwykle przy połowie słowa liczy się tylko to
    > młodsze.
    > czy będzie to tak a wewnątrz procedura inline szukaj_przesuwajac
    > używająca << maksymalnie 4 razy?
    > uint32_t mask
    > if(mask)
    > {
    > if (mask & 0x0000ffff) //16 młodszych
    > {
    > if (mask & 0x000000ff) //8 najmłodszych
    > {
    > if (mask & 0x0000000f) szukaj_przesuwajac
    > else szukaj_przesuwajac
    > }
    > else
    > {
    > if (mask & 0x00000f00) szukaj_przesuwajac
    > else szukaj_przesuwajac
    > }
    > }
    > else
    > {
    > if (mask & 0x00ff0000) //8 najmłodszych
    > {
    > if (mask & 0x000f0000) szukaj_przesuwajac
    > else szukaj_przesuwajac
    > }
    > else
    > {
    > if (mask & 0x0f000000) szukaj_przesuwajac
    > else szukaj_przesuwajac
    > }
    > }
    > }

    Tka przy okazji, z czystej ciekawosci sie pytam na jakim systemie to mam byc
    implementowane - czy to tylko teoretyczne dewagacje - za wyjatkiem duzych
    web-serwerow i baz danych obslugujacych bardzo duze firmy (w tym przypadku sa dobrze
    znane rozwiazania jak radzic sobie z problemem) ciezko mi wyobrazic sobie system
    ktory uruchamia miliony watkow - nie mowiac juz o milionach zadan.

strony : [ 1 ] . 2 . 3


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: