Narzędzia użytkownika

Narzędzia witryny


sk2:good_practices

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:good_practices [2020/11/09 22:53]
jkonczak
sk2:good_practices [2022/11/21 21:52] (aktualna)
jkonczak
Linia 13: Linia 13:
 Metoda 2: Metoda 2:
   * przygotowuje się obiekt/​funkcję parsującą strumieniowe dane, która:   * przygotowuje się obiekt/​funkcję parsującą strumieniowe dane, która:
-   * przyjmuje porcję danych dowolnego rozmiaru +    ​* przyjmuje porcję danych dowolnego rozmiaru 
-   ​* wywoływana jest wielokrotnie dla kolejnych porcji danych +    * wywoływana jest wielokrotnie dla kolejnych porcji danych 
-   ​* analizuje dane które przyszły +    * analizuje dane które przyszły 
-   ​* pamięta w jakim stanie się znajduje +    * pamięta w jakim stanie się znajduje 
-   ​* po przygotowaniu całych wiadomości zwraca je lub wywołuje funkcję do obsługi wiadomości +    * po przygotowaniu całych wiadomości zwraca je lub wywołuje funkcję do obsługi wiadomości 
-   ​* <​html><​small></​html>//​przykład #1:// funkcja dodaje kolejną porcję do bufora, następnie dopóki w buforze znajdzie znak końca wiadomości usuwa gotową wiadomość z bufora \\ //przykład #2:// funkcja buduje na bieżąco strukturę danych reprezentującą przychodzący json<​html></​small></​html>​+    * <​html><​small></​html>//​przykład #1:// funkcja dodaje kolejną porcję do bufora, następnie dopóki w buforze znajdzie znak końca wiadomości usuwa gotową wiadomość z bufora \\ //przykład #2:// funkcja buduje na bieżąco strukturę danych reprezentującą przychodzący json \\ //przykład #3:// funkcja odbiera nazwy, rozmiar i zawartość kolejnych plików i zapisuje je na bieżąco na dysk<​html></​small></​html>​
   * dane są odbierane w takich procjach jak przychodzą i są przekazywane powyższej funkcji   * dane są odbierane w takich procjach jak przychodzą i są przekazywane powyższej funkcji
  
Linia 50: Linia 50:
     - wyślij nieblokująco wszystko co się da (pamiętaj o zwalnianiu pamięci)     - wyślij nieblokująco wszystko co się da (pamiętaj o zwalnianiu pamięci)
     - jeśli wysłano wszystko – przestań czekać na zdarzenie zapisu     - jeśli wysłano wszystko – przestań czekać na zdarzenie zapisu
-  * jeśli ​progam ​potrzebuje pisać z wielu wątków, potrzeba jest synchronizacja (zamek) na obgługę zapisów+  * jeśli ​program ​potrzebuje pisać z wielu wątków, potrzeba jest synchronizacja (zamek) na obsługę zapisów
 Metoda 2: Metoda 2:
   * dla każdego połączenia trzymany jest wątek do wysyłania, lista wiadomości,​ zamek i zmienna warunkowa   * dla każdego połączenia trzymany jest wątek do wysyłania, lista wiadomości,​ zamek i zmienna warunkowa
Linia 82: Linia 82:
 ==== Podejście niskopoziomowe / wysokopoziomowe ==== ==== Podejście niskopoziomowe / wysokopoziomowe ====
  
-Przy programach nie wymagających wysokiej wydajności zwykle szuka się rozwiązań wymagających jak najmniej czasu od programisty - czyli szuka się bibliotek które robią większosć rzeczy za programistę.+Przy programach nie wymagających wysokiej wydajności zwykle szuka się rozwiązań wymagających jak najmniej czasu od programisty - czyli szuka się bibliotek które robią większość rzeczy za programistę.
  
-Dla osiągniecia ​wysokiej wydajności zaleca się korzystanie z wydajnych, zwykle niskopoziomowych mechanizmów - albo bezpośrednio,​ albo za pomocą bibliotek nastawionych na wydajność (a nie wygodę użytkownika). Takie biblioteki są dostępne na różnym poziome ​abstrackji, porównaj np. [[https://​www.boost.org/​doc/​libs/​release/​libs/​asio/​|boost asio]] i [[https://​en.wikipedia.org/​wiki/​Libevent|libevent]]).+Dla osiągnięcia ​wysokiej wydajności zaleca się korzystanie z wydajnych, zwykle niskopoziomowych mechanizmów - albo bezpośrednio,​ albo za pomocą bibliotek nastawionych na wydajność (a nie wygodę użytkownika). Takie biblioteki są dostępne na różnym poziome ​abstrakcji, porównaj np. [[https://​www.boost.org/​doc/​libs/​release/​libs/​asio/​|boost asio]] i [[https://​en.wikipedia.org/​wiki/​Libevent|libevent]]).
 Wysokowydajne mechanizmy niskopoziomowe to: Wysokowydajne mechanizmy niskopoziomowe to:
   * Linux: epoll (omawiany na zajęciach)   * Linux: epoll (omawiany na zajęciach)
Linia 96: Linia 96:
 ==== Middleware ==== ==== Middleware ====
  
-Dostępnych też jest wiele //​middleware//​ (warstw pośredniczących) które pozwalają programiście używać sieci bez pisania kodu obsługjącego sieć, np:+Dostępnych też jest wiele //​middleware//​ (warstw pośredniczących) które pozwalają programiście używać sieci bez pisania kodu obsługującego sieć, np:
   * [[https://​en.wikipedia.org/​wiki/​Remote_procedure_call|RPC]] / [[https://​en.wikipedia.org/​wiki/​Distributed_object_communication|RMI]]   * [[https://​en.wikipedia.org/​wiki/​Remote_procedure_call|RPC]] / [[https://​en.wikipedia.org/​wiki/​Distributed_object_communication|RMI]]
   * [[https://​pl.wikipedia.org/​wiki/​Message_Passing_Interface|MPI]]   * [[https://​pl.wikipedia.org/​wiki/​Message_Passing_Interface|MPI]]
Linia 106: Linia 106:
 Często w komunikacji sieciowej korzysta się z dodatkowych warstw abstrakcji między TCP a wiadomościami aplikacyjnymi do osiągnięcia:​ Często w komunikacji sieciowej korzysta się z dodatkowych warstw abstrakcji między TCP a wiadomościami aplikacyjnymi do osiągnięcia:​
   * bezpieczeństwa (integralności,​ poufności, autentyczności) wykorzystując [[https://​en.wikipedia.org/​wiki/​Transport_Layer_Security|SSL lub TLS]]   * bezpieczeństwa (integralności,​ poufności, autentyczności) wykorzystując [[https://​en.wikipedia.org/​wiki/​Transport_Layer_Security|SSL lub TLS]]
-  * kompresję ​danych (o ile dane dają się kompresować) wykorzystując np. [[https://​en.wikipedia.org/​wiki/​Zlib|deflate,​ zlib]], [[https://​en.wikipedia.org/​wiki/​LZ4_(compression_algorithm)|lz4]]+  * kompresji ​danych (o ile dane dają się kompresować) wykorzystując np. [[https://​en.wikipedia.org/​wiki/​Zlib|deflate,​ zlib]], [[https://​en.wikipedia.org/​wiki/​LZ4_(compression_algorithm)|lz4]], [[https://​en.wikipedia.org/​wiki/​Zstd|zstd]]
  
 ==== Testowanie ==== ==== Testowanie ====
sk2/good_practices.1604958824.txt.gz · ostatnio zmienione: 2020/11/09 22:53 przez jkonczak