W niedawnej "technicznej dyskusji" zapytano mnie "w jaki sposób osiągasz wielowątkowość używając jednego wątku?" Po potwierdzeniu, że ankieter nie uznał tego za podchwytliwe pytanie, musiałem przyznać, że nie miałem dobrego pomysł, jak osiągnąć wielowątkowość w jednym wątku, a ponadto, uznałem to pytanie za pewną sprzeczność. Odpowiedź, którą podał ankieter, "za pomocą delegata ds. Multiemisji" sprawiła, że zastanawiałem się, czy on naprawdę nie rozumiał delegatów i podstawowych wątków. Byłbym zainteresowany, aby wiedzieć, czy pytanie ma jakieś zalety i, co ważniejsze, jeśli skojarzona odpowiedź ma jakiś sens. Dziękuję Ci.w jaki sposób osiągnąć wielowątkowość za pomocą jednego wątku?
Odpowiedz
Coroutines są czymś, co można zrobić, aby zasymulować współpracę wielowątkowości (nieobsługiwany przez .NET, chyba że weźmiemy pod uwagę, że wzorzec async
/await
ma charakter coroutine).
Programowanie asynchroniczne symuluje wielowątkowość (przynajmniej częściowo ... Wykonano więcej niż jeden odczyt/zapis na przykład w tym samym czasie) ... Oba są możliwymi rozwiązaniami, które ukrywają część "gwintowania".
Aby opracować programowanie asynchroniczne ... Można zbudować cały serwer WWW, który będzie w stanie odpowiadać na setkę żądań w tym samym czasie, na podstawie pojedynczego wątku + asynchronicznego opracowania. Każdy odczyt z dysku zostanie wykonany asynchronicznie. Każda odpowiedź na łączących się klientów byłaby wykonywana asynchronicznie i tak dalej.
Aby nadać nazwę, z tego co mi pojąć, node.js jest pojedynczym gwintowane serwer WWW całości opiera się na programowaniu asynchronicznym (technicznie nazywa zakaz blokowania I/O), ... zobacz np https://stackoverflow.com/a/14797359/613130
Do czego Napisałem, dodam, że są pewne języki, które implementują to, co nazywa się Green threads. Zielone wątki są wątkami współpracy, które nie korzystają z programu planującego systemu operacyjnego. Ich kod jest więc wykonywany w jednym wątku (przynajmniej z ich punktu widzenia). Wygląda na to, że Go, haskell, stara Ruby, różne wersje Smalltalk używają/używają zielonych wątków).
asynchroniczne! = Wielowątkowe. główna różnica polega na tym, że kod asynchroniczny może uruchomić cały "blok" kodu, wszystko na raz, i może zamienić się tylko na inną sekcję kodu, gdy kończy się inny blok. W środowisku wielowątkowym może wstrzymać wykonywanie stosu, zamienić go na inny kontekst, a następnie wrócić do poprzedniego kontekstu. Nie widzę, jak C# byłby w stanie to osiągnąć; jest zbyt wysoki, aby go wykonać bez pomocy wątków. – Servy
@Servy Co mam na myśli to, że z perspektywy zewnętrznego obserwatora, asynchroniczne == wielowątkowe: więcej niż jedno żądanie może być przetwarzane przez Node.js w tym samym czasie. A tak na prawdę asynchroniczny jest podobny do wielowątkowego, ponieważ pozostawiasz operację w systemie operacyjnym, który wykona ją na jednym z wątków.Zamiast wielowątkowości "wewnątrz" procesu, jest wielowątkowy "w całym procesie i systemie operacyjnym". Tak, dzieli się przysłowiowe włókno na 4, ale pytanie było pół-podstępne, wymagające przynajmniej odrobiny myślenia lateralnego. – xanatos
Jednak faktem jest, że nie jest to wielowątkowość. Może to oznaczać, że osoba zadająca pytanie w rzeczywistości oznacza "asynchroniczny", a nie "wielowątkowy". Gdyby tak było, byłaby to odpowiedź. – Servy
- 1. Jak osiągnąć sprzężenie wewnętrzne za pomocą SQLAlchemy?
- 2. W Eksploratorze pakietów Eclipse, w jaki sposób mogę rozwinąć drzewo za pomocą jednego kliknięcia?
- 3. Wielowątkowość w IronPythonie
- 4. Jak wykonywać wielowątkowość za pomocą asynchronicznych zapytań webowych
- 5. W jaki sposób powinienem kodować, aby stawić opór "piractwu za pomocą jednego kliknięcia"?
- 6. Synchronizowanie wielu dostawców za pomocą jednego SyncAdapter
- 7. Przyspieszenie pętli za pomocą wielowątkowość w C# (Pytanie)
- 8. za pomocą interaktywnych i nieinteraktywnych backendów w ramach jednego programu
- 9. Ponowne użycie wątku Java za pomocą executora
- 10. Wielowątkowość Java w laptopie z czterordzeniowym procesorem
- 11. Delphi TList w wielowątkowość
- 12. Jakikolwiek sposób osiągnąć i ++ w matlab?
- 13. ZeroMQ: jak uzyskać wielowątkowość typu C
- 14. Wielowątkowość w Bash
- 15. Scenka z fizyki Qt wielowątkowość
- 16. W jaki sposób ułatwić zapamiętanie głosowania za pomocą plików cookie?
- 17. W jaki sposób debugujesz funkcje za pomocą PostgreSQL?
- 18. W jaki sposób opracowujesz servlety Java za pomocą Eclipse?
- 19. W jaki sposób utworzyć płatną aplikację Chrome za pomocą PayPal?
- 20. W jaki sposób klikasz element ukryty za pomocą Selenium WebDriver?
- 21. W jaki sposób kompilujesz kod Pythona 3.5 za pomocą Mingw?
- 22. W jaki sposób "Mavenize" projekt za pomocą Intellij?
- 23. W jaki sposób mogę pobrać słoik za pomocą programisty programistycznie
- 24. W jaki sposób zapewniasz zależność od GoogleApiClient za pomocą Dagger2?
- 25. Użycie vsx w jaki sposób utworzyć podmenu za pomocą poleceń?
- 26. W jaki sposób wprowadzasz/wygaszasz kolor tła za pomocą jquery?
- 27. W jaki sposób zaimplementowano metodę ustawiającą zatrzymanie za pomocą @synthesize?
- 28. W jaki sposób utworzyć kolekcję z limitem za pomocą mangusty?
- 29. W jaki sposób Angularjs obsługuje zarządzanie pamięcią za pomocą ngView?
- 30. javascript: W jaki sposób obrócić tekst za pomocą javascript?
* Podchwytliwe pytanie *, chociaż :). –
Tak; nie ma pojęcia o czym mówi. Poprawną odpowiedzią są włókna. – SLaks
@SLaks Powiedziałbym, że nadal nie jest wielowątkowość. – hvd