eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDlaczego w branży rozrywkowej najsłabiej płacą?Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Andrzej Jarzabek <a...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
    Date: Sun, 16 Oct 2011 22:26:25 +0100
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 101
    Message-ID: <j7fi63$mte$1@inews.gazeta.pl>
    References: <5...@n...onet.pl> <j6f0tl$f35$1@inews.gazeta.pl>
    <f...@j...googlegroups.com>
    <j6hra9$6qj$1@inews.gazeta.pl>
    <4...@t...googlegroups.com>
    <j6l5sd$5u$1@inews.gazeta.pl> <j6m0pc$pp6$1@inews.gazeta.pl>
    <j6sqj7$skh$1@inews.gazeta.pl> <j6tqei$hr2$1@inews.gazeta.pl>
    <j6u1ie$2ri$1@inews.gazeta.pl>
    <d...@5...googlegroups.com>
    <j6udri$b1b$1@inews.gazeta.pl>
    <a...@d...googlegroups.com>
    <j71a8c$cti$1@inews.gazeta.pl>
    <6...@p...googlegroups.com>
    <j725i2$7d5$1@inews.gazeta.pl> <j73f5k$en8$1@inews.gazeta.pl>
    <j755n8$1f6$1@inews.gazeta.pl> <j75bgq$cuh$1@inews.gazeta.pl>
    <j76a0i$nds$1@inews.gazeta.pl>
    <0...@q...googlegroups.com>
    <j7cvbk$nnh$1@inews.gazeta.pl>
    NNTP-Posting-Host: 5ac53c1f.bb.sky.com
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1318800387 23470 90.197.60.31 (16 Oct 2011 21:26:27 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 16 Oct 2011 21:26:27 +0000 (UTC)
    X-User: septi
    In-Reply-To: <j7cvbk$nnh$1@inews.gazeta.pl>
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110929
    Thunderbird/7.0.1
    Xref: news-archive.icm.edu.pl pl.comp.programming:192911
    [ ukryj nagłówki ]

    On 15/10/2011 22:51, Wojciech Jaczewski wrote:
    > Andrzej Jarzabek wrote:
    >
    >> niemożliwe - choćby że w trakcie modyfikacji kodu ktoś zmodyfikuje
    >> zakresy tak, że deskryptor będzie zdefiniowany w innym niż jego lock,
    >
    > Mało prawdopodobne, aby w wyniku zwykłej pomyłki a nie celowego psucia
    > rozdzielić taką sekwencję do osobnych bloków:
    >
    > int fd = jakas_tam_metoda_tworzenia_fd();
    > fd_guard_t fd_guard(fd);

    Nie jest to aż tak mało prawdopodobne, żeby dla wielu takich mało
    prawdopodobnych zdarzeń te prawdopodobieństwa nie skumulowały się do
    czegoś zbliżonego do pewności.

    >> albo ktoś gdzies wstawi zamykanie tego deskryptora ręcznie.
    >
    > Opakowanie deskryptora w obiekt też wiele na to nie pomoże, bo np. dalsza
    > część funkcji chciała coś wysłać przez deskryptor, a on zamknięty.

    Kompilator wyłapie, że obiektu nie ma w zakresie.

    >> streambuf ma buforowanie, więc tak to właśnie raczej powinno działać.
    >> Jednak musisz przyznać, że z punktu widzenia kogoś, kto chce
    >> sfotmatować komunikat i przesłać go po połączeniu albo z kolei
    >> odczytać komunikat zakończony np. CR-LF, niekoniecznie takie szczegóły
    >> implementacyjne są interesujące.
    >
    > Są interesujące, jeśli nie chce aby użytkownik przy jego programie ćwiczył
    > swoją cierpliwość - gdy akurat przywiesiło się połączenie.

    No więc z punktu widzenia sensowności organizacji kodu (i co za tym
    idzie niezawodności, maintainability itd.) to mieszanie obsługi
    przywieszonego połączenia z logiką obsługi tego, o czym program jest
    informowany albo o czym informuje za pomocą tego połączenia to tragedia.

    > Albo załóżmy, że mamy prosty protokół, gdzie każda ze stron, na przemian
    > wysyła po jednej lub więcej linii tekstu. Za pomocą interfejsów istream tego
    > się nie odbierze, bo nie wiadomo ile linii zostało przysłanych.

    Sensowne protokoły mają zwykle jakiś sposób zaznaczania końca komunikatu.

    >> Sensowniejsze o tyle, że masz rodzieloną logikę mówiącą jak na jakieś
    >> zdarzenie trzeba reagować z samą obsługą i rozstrzyganiem tego, na co
    >> jak trzeba zareagować. W związku z tym komuś dodającemu nowy typ
    >> zdarzenia do obsługi trudniej będzie zepsuć jakiś aspekt istniejącej
    >> logiki, niż jeśli modyfikuje dużą pętlę z 'jeśli sygnał to tamto,
    >> jeśli coś na sockecie to śmamto, jeśli minęło tyle czasu to owamto".
    >
    > Wszystko zależy od przypadku. Czasem lepiej widać co się dzieje, gdy
    > wszystkie te zdarzenia obsłużone są w jednym miejscu.

    Być może, ale to "czasami" według mnie w większości odnosi się do
    niewielkich programów.

    >> W rzeczywistości wątków się używa bo to wydajny i elastyczny sposób na
    >> zrównoleglenie aplikacji. W przypadku stosowania oddzielnych procesów
    >> samo kszta związane z narzutem na ich odpalanie, IPC itd. często
    >> zabijają wszelkie korzyści ze zrównoleglenia.
    >
    > Pamięci dzielonej da się używać także między procesami. Jedyne ograniczenie:
    > nie można między jednym a drugim przekazywać wprost wskaźników. Czy tak
    > często jest to problemem... nie wiem.

    Bardzo wiele struktur danych zawiera w sobie wskaźniki. Można oczywiście
    zrobić ich odpowiedniki bez wskaźników, ale to jest dodatkowa
    komplikacja, gorsza wydajność i im więcej tego robisz, tym więcej ci
    wraca problemów, które masz z wątkami.

    Pracowałem z takimi systemami, gdzie zamiast wątków robiło się wiele
    procesów operujących na pamięci dzielonej działającej jako prosta baza
    danych, i skalowanie tego było bardzo problematyczne.

    > Narzut odpalania występuje także dla wątków.

    Znacznie mniejsze.

    > Nieprzypadkowo istnieją thread-pool, więc mogą i process-pool.

    Można, ale masz dodatkową komplikację opisu każdego zadania i każdego
    rodzaju danych który chcesz przekazać. Na wątkach można po prostu
    przekazać jakiegoś dowolnego funktora.

    >> Owszem, standard się rozwija, ale zachowanie wsteczniej
    >> kompatybilności z latami 70-tymi jest ważniejsze niż tworzenie
    >> lepszych abstrakcji. Raczej bym powiedział, że rozwój koncentruje się
    >> na dostarczaniu nowej funkcjonalności, słusznie zakładając, że
    >> potrzeba abstrakcji będzie zaspokojona przez biblioteki opakowujące.
    >
    > W samym Linuksie dodawane są też wywołania systemowe, które nowej
    > funkcjonalności tak na prawdę nie wprowadzają, tylko zapewniają inny
    > interfejs do funkcjonalności już istniejących. Np. timerfd_create, signalfd.
    > Dla frameworka to bez większej różnicy, natomiast jest różnica dla programów
    > operujących bezpośrednio na tym API.
    > [Wymienione przeze mnie przykłady są Linux-specific, ale w końcu to też jest
    > uniksowego API].

    Drugi problem, o którym miałem napisać, ale zapomniałem, to że te
    interfejsy systemowe są zazwyczaj w C, a to język wyjątkowo kiepsko
    nadający się do wyrażania jakichkolwiek abstrakcji.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: