मैं विचार और scalaz समवर्ती पैकेज, मुख्य रूप से भविष्य और टास्क कक्षाएं, लेकिन पीछे उद्देश्य को समझने के लिए कोशिश कर रहा हूँ समझने पर एक छोटी सी मदद की जब उन्हें कुछ आवेदन में उपयोग करते हुए, यह अब दूर सरल अनुक्रमिक एनालॉग से है, जबकि scala.concurrent.Future
, बेहतर तो बेहतर काम करता है। क्या कोई भी स्केलज़ के साथ समवर्ती/एसिंक्रोनस एप्लिकेशन लिखने पर अपने अनुभव के साथ साझा कर सकता है, मूल रूप से इसका उपयोग async
विधि का सही तरीके से कैसे करें? के रूप में मैं स्रोतों से समझते हैं async
मानक future
करने के लिए कॉल की तरह एक अलग थ्रेड का उपयोग नहीं करता, या scalaz कार्यों से fork/apply
तरीकों, तो क्यों यह async
तो कहा जाता है? क्या इसका मतलब है कि स्कालज़ के साथ वास्तविक सहमति प्राप्त करने के लिए मुझे हमेशा fork(now(...))
या apply
पर कॉल करना होगा?Scalaz भविष्य और टास्क
उत्तर
मैं एक scalaz विशेषज्ञ नहीं हूँ, लेकिन मैं आपको एक छोटा सा मदद करने के लिए कोशिश करेंगे। मुझे अपने प्रश्नों का उत्तर एक-एक करके करने का प्रयास करें:
1) क्या कोई भी स्केलज़ के साथ समवर्ती/असीमित अनुप्रयोग लिखने पर अपने अनुभव के साथ साझा कर सकता है, मूल रूप से इसकी एसिंक विधि का सही तरीके से उपयोग कैसे करें?
चलो पहले async
हस्ताक्षर पर एक नज़र डालें:
def async[A](listen: (A => Unit) => Unit): Future[A]
यह पहली बार में थोड़ा गुप्त हो सकता है इसलिए हमेशा के रूप में यह अच्छा विचार संभव उपयोग के मामलों को समझता है करने के लिए परीक्षण को देखने के लिए है। हम सिर्फ हस्ताक्षर (A => Unit) => Unit
के समारोह का उपयोग कर नए भविष्य का निर्माण हस्ताक्षर Future.async
से जानते हैं
"when constructed from Future.async" ! prop{(n: Int) =>
def callback(call: Int => Unit): Unit = call(n)
Future.async(callback).run must_==
}
: https://github.com/scalaz/scalaz/blob/scalaz-seven/tests/src/test/scala/scalaz/concurrent/FutureTest.scala में आप निम्नलिखित कोड मिल सकता है। इसका वास्तव में क्या अर्थ है कि Future.async पैरामीटर फ़ंक्शन के रूप में लेता है जो दिए गए कॉलबैक के लिए सभी आवश्यक गणना करता है और उस कॉलबैक को परिणाम पास करता है।
यह ध्यान रखना महत्वपूर्ण है कि Future.async
स्वयं पर कोई भी गणना नहीं चलाता है, यह केवल बाद में चलाने के लिए संरचना तैयार करता है।
2) जैसा कि मैं स्रोतों से समझता हूं async मानक भविष्य में कॉल जैसे अलग थ्रेड का उपयोग नहीं करता है, या स्केलज़ कार्यों से फोर्क/लागू विधियों का उपयोग नहीं करता है, तो इसे एसिंक क्यों कहा जाता है?
आप सही हैं। प्रतीत होता है कि केवल fork
और apply
धागे का उपयोग करके कुछ भी चल रहा है, जो implicit pool: ExecutorService
वाले हस्ताक्षरों को देखकर नोटिस करना आसान है। मैं यहां लेखकों के लिए बात नहीं कर सकता, लेकिन मुझे लगता है कि एसिंक कॉलबैक से संबंधित है। इसका मतलब यह है कि इसे भविष्य में अवरुद्ध करने के बजाय अंत में परिणामस्वरूप आप एसिंक्रोनस कॉलबैक का उपयोग करेंगे।
3) क्या इसका मतलब यह है कि स्केलज़ के साथ वास्तविक सहमति प्राप्त करने के लिए मुझे हमेशा कांटा (अब (...)) या आवेदन करना होगा?
मैं क्या कह सकता हूँ से, हाँ। बस ध्यान दें कि जब आप सिंटैक्स Future(x)
का उपयोग कर भविष्य बना रहे हैं तो आप यहां apply
विधि का उपयोग कर रहे हैं, इसलिए यह एक प्रकार का डिफ़ॉल्ट व्यवहार है (जो ठीक है)।
यदि आप स्केलज़ फ़्यूचर्स के डिज़ाइन को बेहतर ढंग से समझना चाहते हैं तो मैं आपको "Functional Programming in Scala" पढ़ने की सलाह दे सकता हूं। मेरा मानना है कि यह पुस्तक मुख्य स्कालज़ योगदानकर्ताओं द्वारा लिखी गई है और अध्याय 7 पूरी तरह कार्यात्मक समांतरता पुस्तकालय के लिए एपीआई डिजाइन करने पर चर्चा करता है। यह स्कालज़ भविष्य के समान नहीं है, लेकिन आप कई समानताएं देख सकते हैं।
आप स्कालज़ टास्क और फ्यूचर के बारे में अद्भुत टिमोथी पेरेट blog post भी पढ़ सकते हैं जिसमें कई स्पष्ट विवरण शामिल नहीं हैं।
async
एसिंक, कॉलबैक-आधारित API को Future
के रूप में अनुकूलित करने के लिए उपयोग किया जाता है। इसे async
कहा जाता है क्योंकि इसकी अपेक्षा की जाती है कि इसका उपयोग किसी ऐसे चीज के साथ किया जाएगा जो असीमित रूप से चलता है, शायद कॉलबैक को लाइन के नीचे कहीं और थ्रेड से कॉल करना। यह "असली" समवर्ती है, बशर्ते एपीआई जिसे आप कॉल कर रहे हैं, वास्तव में इसे अतुल्यकालिक रूप से उपयोग करता है (उदाहरण के लिए मैं Future.async
का उपयोग एडब्ल्यूएस एसडीके के एसिंक भागों के साथ AmazonSimpleDBAsyncClient
) के साथ करता हूं।
यदि आप चाहते हैं scalaz Task
एपीआई से 'असली' संगामिति सीधे आप जा रहा है सुरक्षित/नियतात्मक और restartable, संगामिति केवल जब स्पष्ट रूप से अनुरोध किया के साथ की ओर fork
या gatherUnordered
जैसी चीजों का उपयोग करने, एपीआई डिफ़ॉल्ट से कई के रूप में की जरूरत है।
जब नक्शा और साथ कार्य रचना flatMap आप कांटा का उपयोग नहीं करके एक प्रदर्शन जीत प्राप्त कर सकते हैं, देखें:
http://blog.higher-order.com/blog/2015/06/18/easy-performance-wins-with-scalaz/
- 1. scalaz scalaz 6
- 2. Scalaz सत्यापन
- 3. scalaz प्रभाव
- 4. अनुप्रयोगी बनाम monadic combinators और Scalaz
- 5. अंतर्निहित पैरामीटर Scalaz
- 6. रीडर इकाई Scalaz
- 7. टास्क और अपवाद चुप्पी
- 8. स्कैला 2.10 भविष्य को scalaz.concurrent में बदलें। भविष्य // कार्य
- 9. टास्क
- 10. scalaz धारा बराबर फ्रेमवर्क के Enumerator.fromCallback खेलने के लिए क्या है
- 11. Scalaz पुस्तकालय आयात तकनीक तर्क
- 12. टास्क और टास्क। टाइमआउट अपवाद हैंडलिंग के साथ प्रतीक्षा करें
- 13. भविष्य [विकल्प [भविष्य [विकल्प [बूलियन]] वायदा और विकल्प सरलीकृत करना?
- 14. रेल और रेक:। रेक टास्क?
- 15. टास्क राज्य और Django-अजवाइन
- 16. सुस्त भविष्य के लिए भविष्य
- 17. भविष्य कार्य ThreadPoolExecutor
- 18. सेमीड और पावरहेल का भविष्य
- 19. std :: भविष्य और std :: वादे
- 20. फोर्कजोइन टास्क बनाम CompletableFuture
- 21. कार्य scalaz कैसे काम करता है। प्रमाणीकरण loopSuccess और loopFailure
- 22. एसिंक टास्क
- 23. scalaz. पथ निर्भर प्रकारों के लिए एक्वाल
- 24. समझ में नहीं आता scalaz एंडो समारोह
- 25. एमएसबिल्ड टास्क
- 26. के बारे में बताएं scalaz-सात
- 27. असफल भविष्य
- 28. चेतावनी: भविष्य
- 29. टास्क क्रिएशनऑप्शन। लोंगरिंग विकल्प और थ्रेडपूल
- 30. कॉन्फ़िगर और टेस्ट Laravel टास्क निर्धारण
इस उत्तर ब्लॉग का संदर्भ, लेकिन यहाँ प्रासंगिक जानकारी शामिल करके सुधार किया जा सकता। भविष्य में मौजूद ब्लॉग पर भरोसा करने का कोई तरीका नहीं है। – axlj