iki işleve arasındaki temel fark birincisi tarafından gerçekleştirilen olmasıdır arama iş parçacığı, ikincisi ise iş parçacığı havuzundaki boş bir iş parçacığı tarafından çağrılır. stackoverflow
Birisi metaforunu (Eyvah ben artık onun adını bilmiyorum) kullanarak fark defasında bana açıkladı.
Kahvaltı yapmak istediğinizi varsayalım. Biraz ekmek atıp biraz yumurta kaynatmalısın.
Sen ekmek tost kadar tost makinesinden tost ekmeği çıkarmak, bekleyip kaynar su başlatmak, tost makinesi içinde biraz ekmek koyabilirim. Su kaynadıktan sonra yumurtaları ekleyin, biraz bekleyin ve yumurtaları sudan alın ve ateşi söndürün. Bu, eşzamanlı yürütmenin tipik bir örneğidir. Diğer taraftan, ekmeği tost makinesine koyduktan sonra, kaynar suya bile başlayabilirsiniz. Ekmekler kızartılıncaya veya su kaynana kadar bekleyiniz. İlk durumda ekmeği çıkaracak ve suyun kaynatılmasını bekleyeceksiniz. İkinci durumda, yumurtaları suya koyacak ve ekmeğin tostu ya da yumurtalar hazır olana kadar bekleyeceksiniz. Bir şey olmasını beklemek zorunda olduğunuz anda, süreci hızlandırmak için başka bir şey yapıp yapamayacağınıza bakın: asenkron yürütmenin tipik bir örneği, ancak yine de bir iş parçacığı tarafından gerçekleştirilir. Bu, ilk işleviniz tarafından kullanılan yöntem, uyumsuz kullanımları yöntemidir. Birkaç parçacığı tarafından gerçekleştirilen eşzamanlı işlemeyi:
en pahalı yöntem Bana yumurta kaynatmak için su ısıtmak başlarken biraz ekmek tost sipariş edecek aşçı kiralama olduğunu.
Yapmanız gereken tek bir iş parçacığınız varsa, bu iş parçacığı bir şeyi pişirmek için bir aşçı işe alır ve iş parçacığı hazır olana kadar beklemesine izin vermezse akıllıca değildir: neden iş parçacığının işi yapmasına izin vermeyin?
Eğer iş parçanızın yapacak başka bir görevi yoksa, ilk işlevinizi kullanın.
Ancak bu ilk işlev yalnızca iş parçacığınız bir eşzamanlama işlevinin kendisinde çalışıyorsa çağrılabilir. Eğer iş parçacığınız bir uyumsuz fonksiyonda değilse ve ekmeğiniz kızartılırken anlamlı bir şey yapabilirse, ikinci yönteminizi kullanmayı düşünün.
İki işlev temelde aynı şeydir, ancak ikincisi beklenemez. 'PrintHelloThread' sadece bir kez" Hello "yazdıracaktır. Async'ın beklemediğini söyleyen –
yeni thread oluşturmuyor mu? Async yöntemleri bazı async çalışmaları yapmak için varsayalım. Çağıran iş parçacığı, bekletme ifadesi ile karşılaşıldığında yürütmeye devam eder. Async yönteminin geri kalanını yürütmek için yeni bir iş parçacığı (iş parçacığı havuzuna bağlı olarak) oluşturulabilir. –