-
Data: 2009-05-20 08:55:46
Temat: Re: jak napisać szybki program
Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 19 Maj, 23:08, Michoo <m...@v...pl> wrote:
> > char my_buffer[my_size];
>
> > Niezależnie od metody dane muszą być przetransferowane z/do my_buffer.
>
> W przypadku dobrej implementacji (na gruncie czystej teorii - nie chce
> mi się teraz zastanawiać gdzie to jak jest zaimplementowane - chodzi mi
> o sam fakt, że jest to jedyny zysk jaki można osiągnąć) i/o kopiowanie
> danych na drodze dysk->ram, bufor karty sieciowej-> ram, etc powinno być
> robione "na zewnątrz" procesora (i to w trybie nie odcinającym go od szyny).
Tak i jest to możliwe zarówno przy synchronicznym jak i
asynchronicznym I/O.
Różnica między nimi jest tylko w tym, że pierwszy czeka na zakończenie
procesu a drugi jest "powiadamiany".
Oczywiście można sobie też wyobrazić, że w jednym z przypadków system
korzysta z dodatkowych buforów i wykonuje dodatkowe kopie danych, ale
to jest kwestia jakości implementacji i nie ma związku z samym
aspektem synchro/asynchro.
Dlatego nie ma sensu twierdzić, że AIO daje jakiś zysk w kontekście
zarządzania buforami.
> synchroniczne i/o: program robi wywołanie systemowe "czytaj" system
> wywala wątek z kolejki procesów gotowych i zleca kontrolerowi transfer,
> po otrzymaniu przerwania od kontrolera proces wraca do kolejki i w
> najbliższym czasie wraca z wywołania
Tak.
> asynchroniczne i/o: program robi wywołanie systemowe "czytaj" system
> zleca kontrolerowi transfer, wątek powraca z wywołania i może pracować.
> po otrzymaniu przerwania od kontrolera system powiadamia wątek o
> zakończeniu operacji.
To duży skrót myślowy [*], ale przyjmijmy roboczo, że tak jest.
Trwa to dokładnie tyle samo (bo dysk się kręci tak samo szybko).
[*] Skrót myślowy polega na tym, że w językach sekwencyjnych nie ma
czegoś takiego jak "powiadamianie wątku". Są dwa możliwe mechanizmy:
1. Sygnalizacja (notify) jakiegoś wskazanego obiektu
synchronizacyjnego. Pozwala to właściwym wątkom roboczym zorientować
się (blokująco bądź nie), że operacja się zakończyła.
2. Wywołanie przez callback - to wywołanie odbywa się w *innym* wątku,
z osobnym stosem, przynajmniej koncepcyjnie (tu wliczamy wszystko od
sygnałów w C po AsyncHandler w Javie). Zwykle jedyna rzecz jaką można
w takim callbacku sensownie zrobić to... ręcznie punkt 1.
To żadna magia, dlatego też w ostatecznym rozrachunku SIO i AIO
mogą robić to samo, z dokładnością do ilości *śpiących* wątków
userlandu. W szczególności istnieją implementacje, które robią SIO
jako nakładkę (!) na AIO albo odwrotnie. To właśnie sprawia, że AIO
nie jest cudownym rozwiązaniem a ponieważ jest intruzywne i słabo
komponowalne (nie da się go zastosować do *istniejącego* kodu), to
powinno być stosowane... ostrożnie.
> W drugim przypadku wątek może pracować w trakcie kopiowania danych.
Czyli cały czas mówimy o użyciu współbieżności w celu lepszego
wykorzystania zasobów sprzętowych. Powtórzę: to nie jest wyłączna
cecha AIO. Współbieżność jest narzędziem bardziej ogólnym.
--
Maciej Sobczak * www.msobczak.com * www.inspirel.com
Następne wpisy z tego wątku
- 20.05.09 12:32 A.L.
- 20.05.09 17:44 Marteno Rodia
- 20.05.09 18:23 Michoo
- 20.05.09 18:31 Marcin 'Qrczak' Kowalczyk
- 21.05.09 02:23 Mariusz Marszałkowski
- 21.05.09 03:26 Mariusz Marszałkowski
- 21.05.09 03:51 Mariusz Marszałkowski
- 21.05.09 03:57 Mariusz Marszałkowski
- 21.05.09 06:35 Jacek Czerwinski
- 21.05.09 09:50 Paweł Kierski
- 21.05.09 13:20 Marcin 'Malcom' Malich
- 21.05.09 16:07 Mariusz Marszałkowski
- 21.05.09 16:58 Marcin 'Malcom' Malich
- 21.05.09 20:20 Mariusz Marszałkowski
- 21.05.09 21:04 Jacek Czerwinski
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-16 Katowice => Key Account Manager (ERP) <=
- 2025-01-16 Środa Wielkopolska => Specjalista ds. public relations <=
- 2025-01-16 Poznań => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-16 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2025-01-16 Re: Bodnatura BARDZO tanio wyceniła Owsiaka. HAŃBA!
- 2025-01-16 Warszawa => Software .Net Developer <=
- 2025-01-15 Gdańsk => System Architect (Java background) <=
- 2025-01-15 Żerniki => Specjalista ds. Employer Brandingu <=
- 2025-01-15 Kraków => User Experience Designer <=
- 2025-01-15 CYA: Minister Finansów odbija piłeczkę do PKW :-) [obiektywny brak możliwości wykonania wewnętrznie sprzecznej uchwały]
- 2025-01-15 Gdańsk => Solution Architect (Java background) <=
- 2025-01-15 Zielona Góra => Senior Field Sales (system ERP) <=
- 2025-01-15 Wrocław => Application Security Engineer <=
- 2025-01-15 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-15 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst