Yakın tarihli bir “teknik tartışma” da, “tek bir iş parçacığı kullanarak çoklu işitmeyi nasıl gerçekleştiriyorsunuz?” Diye sorulmuştum. Görüşmecinin bunu bir hile sorusu olarak kabul etmediğini onayladıktan sonra, iyi bir şey yapmadığımı itiraf etmeliydim. Tek bir iş parçacığı üzerinde çoklu iş parçacığına nasıl ulaşılabileceğine ve daha da önemlisi, bu soruya biraz çelişki verdiğimi düşündüm. Görüşmecinin “çok noktaya yayın yapan bir delege kullanarak” yanıtı, bana delegeleri ve altta yatan ipliği gerçekten anlamadığını merak etmemi sağladı. Sorunun herhangi bir liyakati olup olmadığını, daha da önemlisi, ilgili cevabın herhangi bir anlam ifade edip etmediğini bilmek isterdim. Teşekkür ederim.Tek bir iş parçacığı kullanarak çoklu iş parçacığını nasıl gerçekleştirirsiniz?
cevap
Koroutinler, kooperatif çoklu iş parçacığının benzetimini yapmak için yapılır (.NET tarafından desteklenmez, async
/await
modelinin bir koroutin kalıbı olduğu düşünülmedikçe). Eşzamansız programlama, çoklu iş parçacığını simüle eder (en azından kısmen ... Örneğin birden fazla okuma/yazma aynı anda yürütülür) ... Her ikisi de "iş parçacığı" bölümünü gizleyen olası çözümlerdir.
Eşzamansız programlama hakkında ayrıntılı bilgi ... Tek bir iş parçacığı + eşzamansız bir ayrıntıya bağlı olarak, yüzlerce istekte aynı anda yanıt verebilen bir web sunucusunun tamamı oluşturulabilir. Diskten okunan her biri eşzamansız olarak yapılacaktır. Bağlanan istemcilere her yanıt, eşzamansız ve benzer şekilde yapılacaktı.
tamamen asenkron programlama dayalı tek dişli bir web sunucusudur node.js ben idrak ne bir isim, vermek https://stackoverflow.com/a/14797359/613130için örneğin bkz ... (teknik olmayan engelleme I/O denir) Ne Ben yazdım, ben Green threads denilen uygulamak bazı dilleri olduğunu ekleyeceğim. Yeşil iş parçacıkları, OS zamanlayıcısını kullanmayan işbirlikçi iş parçacıklarıdır. Kodları tek bir iş parçacığıyla yürütülür (en azından kendi bakış açılarından). Görünüşe göre Go, haskell, eski Ruby, Smalltalk'ın çeşitli sürümleri yeşil iş parçacıklarının kullanıldığı/kullanıldığı).
asenkron = = çok iş parçacıklı olarak kullanılır. asıl fark, eşzamansız kod için sadece bir kerede bütün bir "blok" komutunu çalıştırabilmesi ve bir başka bütün blok bittiğinde sadece kodun başka bir bölümüne geçebilmesidir. Çok iş parçacıklı bir ortamda, bir yığının yürütülmesini duraklatabilir, başka bir bağlamla değiştirebilir ve sonra önceki içeriğe geri dönebilir. C# nin bunu nasıl başarabileceğini göremiyorum; iş parçacığı yardımı olmadan bunu başarmak için bir seviye çok yüksek. – Servy
@Servy Demek istediğim, dış gözlemci perspektiften, eşzamansız == multithreaded: Node.js tarafından aynı anda birden fazla istek işlenebilir. Ve gerçekte asenkron olarak çoklu iş parçacığına benzer, çünkü işlemi iş parçacıklarından birinde çalıştıracak olan işletim sistemine bırakıyorsunuz.Bu yüzden, süreci "içine" yerleştirmek yerine, "süreç ve işletim sistemi boyunca" çok iş parçacıklısı oluyor. Evet, 4'te atasöz elyafını bölüyor, ama soru en azından biraz yanal düşünme gerektiren yarı-hileli bir soruydu. – xanatos
Ama gerçek şu ki, bu çoklulaştırma değil. Bu, soruyu soran kişinin "asenkron" anlamına geldiği ve "çoklu okuma" anlamına gelmediği anlamına gelebilir. Eğer yaptılarsa, bu bir cevap olurdu. – Servy
- 1. Çoklu iş parçacığı nasıl ekleyebilirim?
- 2. Python'daki bir iş parçacığını nasıl öldürebilirim
- 3. C++ Çoklu iş parçacığı eşitlemesi
- 4. Gelişmiş çoklu iş parçacığı - Java
- 5. Android'de çoklu iş parçacığı nasıl çalışır?
- 6. Bir derste iş parçacığını nasıl kullanırım?
- 7. İki web hizmetini çoklu iş parçacığı kullanarak nasıl topluyorum?
- 8. İş parçacığı durduruluyor
- 9. Sadece bir iş parçacığında çalışan birkaç 'iş parçacığı' nasıl işlenir
- 10. Birden çok iş parçacığı ile tek bir dosyada nasıl yazılır?
- 11. İş parçacığı tanıtıcısı iş parçacığı tanıtıcısı
- 12. iş parçacığı içinde yerel depolama iş parçacığı
- 13. iş parçacığı
- 14. başka bir iş parçacığı (Net)
- 15. İş parçacığı engellenmeden bekleyin. - Nasıl?
- 16. ExecutorService yavaş çoklu iş parçacığı performansı
- 17. Bir iş parçacığı veya iş parçacığı için bir DAO DAO?
- 18. UI'dan ayrı iş parçacığı
- 19. Django'da toplu iş parçacığını nasıl uygularım?
- 20. Java'da Konu Başlıkları ve Çoklu İş Parçacığı
- 21. Bir "gerçek" iş parçacığı
- 22. İş parçacığını belirli bir süre sonra durdurun
- 23. nHabernate oturumu ve çoklu iş parçacığı
- 24. IE6'da JavaScript çoklu iş parçacığı mı?
- 25. Çoklu iş parçacığı ortamında yürütme süresi
- 26. D-Bus iş parçacığı modeli
- 27. Bir iş parçacığını çalıştırmak için TimerTask'ı nasıl kullanıyorsunuz?
- 28. Çoklu iş parçacığı sorunu değeri güncelleştiriliyor
- 29. Kinect ile iş parçacığı
- 30. Bir iş parçacığı iptal ettiniz mi?
* hile sorusu *, yine de :). –
Evet; Ne hakkında konuştuğunu bilmiyor. Doğru cevap liflerdir. – SLaks
@SLaks Hala multithreading olmadığını söyleyebilirim. – hvd