W celu opracowania wysoce obciążonej sieci aplikacji serwerowej na Linuksie, jaka architektura jest preferowana? Chodzi o to, że ta aplikacja zazwyczaj działa na maszynach z wieloma rdzeniami (wirtualnymi lub fizycznymi). Biorąc pod uwagę, że wydajność jest kluczowym kryterium, czy lepiej jest wybrać aplikację wielowątkową lub wersję wieloprocesową? Wiem, że dzielenie zasobów i synchronizacja w celu uzyskania dostępu do takich zasobów z wielu procesów wiąże się z dużym nakładem pracy związanym z programowaniem, ale jak wspomniano wcześniej, najważniejsza jest ogólna wydajność, więc możemy zignorować te rzeczy. A językiem programowania będzie C/C++.wydajność - aplikacje wielowątkowe lub wieloprocesowe
Słyszałem, że nawet aplikacje wielowątkowe (pojedynczy proces) mogą korzystać z wielu rdzeni i uruchamiać każdy wątek w innym rdzeniu niezależnie (o ile nie ma problemów z synchronizacją). A to planowanie odbywa się przez jądro. Jeśli tak, czy nie ma dużej różnicy w wydajności między aplikacjami wielowątkowymi a aplikacjami wieloprocesowymi? Nginx używa architektury wieloprocesowej i jest naprawdę szybki, ale czy można uzyskać taką samą wydajność w aplikacjach wielowątkowych?
Dzięki.
@ p-l: Dziękuję za odpowiedź. Tak, plan zakłada wykorzystanie architektury opartej na równomierności i działanie w oparciu o zdarzenia sieciowe. W czasie wykonywania nie są tworzone dodatkowe wątki i procesy. Biorąc to pod uwagę, nie widzisz różnicy w wydajności między aplikacjami wielowątkowymi i wieloprocesowymi? Na przykład: jeśli istnieje system z czterema rdzeniami, nie będzie zauważalnej różnicy w wydajności pomiędzy obydwoma architekturami? – sthustfo
Największymi różnicami byłyby harmonogramy, które można modyfikować za pomocą powinowactwa jednostki cpu, przypinając każde zadanie (wątek/proces) do konkretnego procesora. Większe różnice mogą wynikać z rzeczywistej pracy wykonywanej przez proces serwera i interakcji z częścią sieciową. Mogą występować różnice w sposobie uzyskiwania dostępu do pamięci, ale mniej związane z różnicą wątków/procesów, co do dzielenia się pamięcią ogólnie w systemie NUMA - chociaż możliwe jest, że obecne jądra obsługują wykonywanie kopii segmentów kodu w różnych NUMA strefy (w przeszłości posiadały to samo dla jądra). –