• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wykonywanie funkcji kilka razy w jednym czasie.

VPS Starter Arubacloud
0 głosów
564 wizyt
pytanie zadane 22 marca 2016 w C i C++ przez sebastian970 Użytkownik (710 p.)
Witam.

Zaczynam dopiero z tak rozbudowanymi programami, więc proszę o wybaczenie jeżeli pytanie jest głupie.

Chciałbym się dowiedzieć jak stworzyć funkcje która może być wykonywana wiele razy w jednym czasie np. funkcje logowania która potrafi w jednym czasie obsłużyć na przykład 10 użytkowników. Oczywiście wiem czym są wątki lecz zauważyłem, że gdy jeden użytkownik się loguje to pozostali są blokowani do puki ten jeden nie zakończy.

Potrzebuje jakiś sugestii/podpowiedzi.

2 odpowiedzi

0 głosów
odpowiedź 22 marca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Tworzysz funkcję w JS  która prześle dane logowania do serwera. Tym "blokowaniem" zajmuje się sieć i stos po stronie komputera i nie musisz się tym przejmować
komentarz 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
Nie za bardzo rozumiem. W java skrypcie?

Server jest napisany w c++ i aktualnie nie mam pomysłu jak to zrobić by na przykład serwer potrafił ogarnąć 10 tyś graczy przesyłających różne dane w tym na przykład wielu z nich dane o swoim położeniu.
komentarz 22 marca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Hmm to 10 czy 10tyś. Uporządkujmy. Na początku miało być coś co obsługuje logowanie użytkowników to sądziłem, że chodzi ci o obsługę jakiejś strony WWW i serwera. Z twych wypowiedzi ogarnąłem, że masz jakąś grę. To otwierasz port na serwerze który nasłuchuje dane i wysyła dane ( czyli 2 wątki ). Ewentualnie wpadłem na pomysł by otworzyć kilka portów np 6 czyli 3 wątki by obsługiwały port nasłuchujący i 3 porty wysyłające dane ( nie mam pewności czy taka opcja istnieje ) i komputer po stronie klienta stwierdzałby czy dany port jest wolny to by wysłał dane itd. Mam nadzieje, że coś pomogłem
0 głosów
odpowiedź 22 marca 2016 przez MetGang Nałogowiec (34,360 p.)
Nie bez powodu się blokują. Jest takie coś jak kolejka logowania, można to zauważyć gdy serwery są przeciążone i musisz czekać. Żeby coś wykonywało się jednocześnie potrzeba wielowątkowości - ogólnie wątków (np. std::thread). Lecz tworzenie nowego wątku dla każdego użytkownika zajedzie jeszcze bardziej serwer niż kolejka. Jeśli już można coś pokombinować z wątkami to to żeby jeden obsługiwał wprowadzanie danych, a drugi ich walidację.
komentarz 22 marca 2016 przez MetGang Nałogowiec (34,360 p.)
Tak jak powiedziałem - wątki. http://en.cppreference.com/w/cpp/thread
komentarz 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
Widzę, albo ja czegoś nie wiem, albo wy nie rozumiecie o co mi chodzi ;dd

Czy jedna instrukcja w wątku może być wykonywana jednocześnie kilka razy?
komentarz 22 marca 2016 przez MetGang Nałogowiec (34,360 p.)
Nie, nie może. W jednym wątku wszystko leci po kolei. Procesor nie jest wstanie wykonywać 2 rzeczy naraz. Aby wykonywać jedną instrukcję "idealnie" w jednym czasie musisz stworzyć parę wątków (poniżej limitu oczywiście...), a i tak będziesz się pieprzyć z synchronizacją.

Ogólnie, lepiej przemyśl całość, gdyż tylko sobie utrudnisz tą "jednoczesnością".
komentarz 22 marca 2016 przez sebastian970 Użytkownik (710 p.)
Zarysuje o co mi chodzi:

1. Użytkownik łączy się. (wątek &connections).

2. Przystępuje do logowania. Wysyła dane i czeka na odpowiedź serwera.

3. Serwer sprawdza dane i łączy się z mysql czekając na odpowiedź serwera mysql zanim odpowie dla użytkownika.

4. W tym samym czasie podłącza się inny użytkownik i także zaczyna logowanie.

5. Serwer dla drugiego użytkownika nie odpowiada bo jeszcze nie rozprawił się z pierwszym użytkownikiem.

Taki mam właśnie problem.
komentarz 23 marca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
edycja 23 marca 2016 przez ZakosiliMiNeta
Po 1 poczytaj jak działa komputer. Po 2 użytkownik czeka bo na serwerze co się dzieje? Co robi serwer że tak długo mu to zajmuje? Może to wina algorytmu twego, a nie wielowatkowosci. Po 3 samo pobieranie wrzuć na 1 wątek sprawdzanie na kilka wątków. Po 4 moim zdaniem wielowatkowosć na 1 rdzeniu jest trochę bez sensu ( tak na przyszłość ). Po 5 napisz dokładnie co twa gra/ program ma robić, bo ciągle uciekasz od tego by ci pomóc. Po 6 bez wielowatkowosci nic nie poradzisz bo wykonywanie dwóch funkcji jednocześnie dzielisz moc procesora na 2 co zajmuje dwukrotnie dłużej

Podobne pytania

0 głosów
1 odpowiedź 184 wizyt
0 głosów
2 odpowiedzi 1,961 wizyt
pytanie zadane 25 września 2015 w C i C++ przez patryk16 Obywatel (1,080 p.)
0 głosów
1 odpowiedź 152 wizyt

93,032 zapytań

141,996 odpowiedzi

321,300 komentarzy

62,379 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...