জাভা 8 স্ট্রিম এবং আরএক্সজাভা পর্যবেক্ষণযোগ্যদের মধ্যে পার্থক্য


144

জাভা 8 স্ট্রিমগুলি কি আরএক্সজাভা পর্যবেক্ষণের মতো?

জাভা 8 স্ট্রিম সংজ্ঞা:

নতুন java.util.streamপ্যাকেজের ক্লাসগুলি উপাদানগুলির স্ট্রিমগুলিতে ক্রিয়ামূলক-স্টাইলের ক্রিয়াকলাপগুলিকে সমর্থন করার জন্য একটি স্ট্রিম এপিআই সরবরাহ করে।


8
অবগতির জন্য আরো RxJava শ্রেণীর মত JDK মধ্যে 9. পরিচয় করিয়ে দিতে প্রস্তাব করা হয় jsr166-concurrency.10961.n7.nabble.com/...
জন Vint

@ জনভিন্ট এই প্রস্তাবটির অবস্থা কী। এটি কি আসলে বিমান চালাবে?
ইগোরগানাপলস্কি

2
@ ইগোরগানাপলস্কি ওহ হ্যাঁ, এটিকে অবশ্যই জেডকে 9 তে রূপান্তর করবে বলে মনে হচ্ছে। cr.openjdk.java.net/~martin/webrevs/openjdk9/… । এমনকি rxJava এর জন্য github.com/akarnokd/RxJavaUtilConcurrentFlow এর জন্য একটি বন্দর রয়েছে
জন ভিন্ট

আমি জানি এটি একটি সত্যই পুরানো প্রশ্ন, তবে আমি সম্প্রতি ভেঙ্কট সুব্রামণিয়ামের এই দুর্দান্ত আলোচনায় অংশ নিয়েছি যা এই বিষয়টির অন্তর্দৃষ্টিপূর্ণ এবং জাভা 9- এ আপডেট হয়েছে: youtube.com/watch?v=kfSSKM9y_0E । RxJava- এ লোকেদের জন্য আকর্ষণীয় হতে পারে।
পেড্রো

উত্তর:


152

টিএল; ডিআর : সমস্ত সিকোয়েন্স / স্ট্রিম প্রসেসিং লিব পাইপলাইন বিল্ডিংয়ের জন্য খুব অনুরূপ এপিআই দিচ্ছে। পার্থক্যগুলি বহু-থ্রেডিং এবং পাইপলাইনগুলির রচনা পরিচালনা করার জন্য এপিআইতে রয়েছে in

আরএক্সজাভা স্ট্রিম থেকে বেশ আলাদা different সমস্ত জেডিকে জিনিসগুলির মধ্যে, rx.Observable এর সবচেয়ে নিকটতম সম্ভবত java.util.stream. সংগ্রাহক স্ট্রিম + কমপ্লিটেবল ফিউচার কম্বো (যা অতিরিক্ত মোনাড স্তরের সাথে ডিল করার জন্য ব্যয় করে আসে, Stream<CompletableFuture<T>>এবং এর মধ্যে রূপান্তর পরিচালনা করতে পারে CompletableFuture<Stream<T>>)।

পর্যবেক্ষণযোগ্য এবং স্ট্রিমের মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে:

  • স্ট্রিমগুলি পুল-ভিত্তিক, পর্যবেক্ষণগুলি পুশ-ভিত্তিক। এটি খুব বিমূর্ত মনে হতে পারে, তবে এর উল্লেখযোগ্য ফলাফল রয়েছে যা খুব কংক্রিট are
  • স্ট্রিমটি কেবল একবার ব্যবহার করা যেতে পারে, পর্যবেক্ষণযোগ্য বহুবার সাবস্ক্রাইব হতে পারে
  • Stream#parallel()ক্রমটি পার্টিশনে বিভক্ত হয় Observable#subscribeOn()এবং Observable#observeOn()হয় না; এটি Stream#parallel()পর্যবেক্ষণযোগ্যদের সাথে আচরণ অনুকরণ করা কঠিন , এটি একবার .parallel()পদ্ধতি ছিল তবে এই পদ্ধতির ফলে এত বিভ্রান্তি .parallel()হয়েছিল যে সমর্থনটি গিথুব, আরএক্সজভাপারালিয়ালের পৃথক ভাণ্ডারে স্থানান্তরিত করা হয়েছিল। আরও বিশদ অন্য উত্তরে
  • Stream#parallel()xচ্ছিক সময়সূচী গ্রহণকারী বেশিরভাগ RxJava পদ্ধতির বিপরীতে, কোনও থ্রেড পুল নির্দিষ্ট করতে অনুমতি দেয় না। যেহেতু একটি জেভিএম-এ সমস্ত স্ট্রিম উদাহরণ একই কাঁটাচামচ পুল ব্যবহার করে, যোগ করা .parallel()ভুলক্রমে আপনার প্রোগ্রামের অন্য একটি মডিউলে আচরণকে প্রভাবিত করতে পারে
  • প্রবাহের মত সময় সংক্রান্ত অপারেশন উদাসীন Observable#interval(), Observable#window()এবং আরও অনেক কিছু; এটি বেশিরভাগ ক্ষেত্রে কারণ স্ট্রিমগুলি পুল-ভিত্তিক হয় এবং পরবর্তী উপাদানটি নিম্ন স্রোতে কখন নির্গত হয় তার উপর উপরের কোনও নিয়ন্ত্রণ থাকে না
  • স্ট্রিমগুলি আরএক্সজাবার সাথে তুলনা করে সীমিত ক্রিয়াকলাপ সরবরাহ করে। উদাহরণস্বরূপ স্ট্রিমগুলির কাট-অফ ক্রিয়াকলাপের অভাব রয়েছে ( takeWhile(), takeUntil()); ব্যবহারের Stream#anyMatch()কাজটি সীমিত: এটি টার্মিনাল অপারেশন, সুতরাং আপনি স্ট্রিমের জন্য একাধিকবার এটি ব্যবহার করতে পারবেন না
  • জেডিকে 8 হিসাবে, কোনও স্ট্রিম # জিপ অপারেশন নেই, যা কখনও কখনও বেশ কার্যকর
  • স্ট্রিমগুলি নিজের দ্বারা তৈরি করা শক্ত, পর্যবেক্ষণযোগ্য বিভিন্ন উপায়ে তৈরি করা যেতে পারে EDIT: মন্তব্যগুলিতে উল্লিখিত হিসাবে, স্ট্রিম নির্মাণের উপায় রয়েছে। তবে যেহেতু কোনও অ-টার্মিনাল সংক্ষিপ্তসার্কিটিং নেই, আপনি উদাহরণস্বরূপ ফাইলটিতে লাইন স্ট্রিম উত্সাহিত করতে পারবেন না (জেডিকে বাক্সের বাইরে ফাইলগুলি # লাইন এবং বাফারড্রেডার # লাইন সরবরাহ করে, এবং অন্যান্য অনুরূপ পরিস্থিতি স্ট্রিম নির্মাণ করে পরিচালনা করা যেতে পারে Iterator থেকে)।
  • পর্যবেক্ষণযোগ্য রিসোর্স ম্যানেজমেন্ট সুবিধা দেয় ( Observable#using()); আপনি এটির সাথে আইও স্ট্রিম বা মুটেক্সটি মোড়াতে পারেন এবং নিশ্চিত হন যে ব্যবহারকারী সংস্থানটি মুক্ত করতে ভুলে যাবেন না - এটি সাবস্ক্রিপশন সমাপ্তির পরে স্বয়ংক্রিয়ভাবে নিষ্পত্তি হবে; স্ট্রিমটির onClose(Runnable)পদ্ধতি রয়েছে তবে আপনাকে এটিকে ম্যানুয়ালি বা সংস্থান-সংস্থান দিয়ে কল করতে হবে। E. g। আপনাকে মনে রাখতে হবে যে ফাইলগুলি # লাইন () অবশ্যই রিসোর্স-ব্লক-এর সাথে আবদ্ধ থাকতে হবে।
  • পর্যবেক্ষকগুলি পুরো পথ দিয়ে সিঙ্ক্রোনাইজ করা হয় (স্ট্রিমগুলির ক্ষেত্রে এটি একই সত্য কিনা তা আমি সত্যিই পরীক্ষা করে দেখিনি)। এটি আপনাকে মৌলিক ক্রিয়াকলাপগুলি থ্রেড-নিরাপদ কিনা তা চিন্তা থেকে বাঁচায় (উত্তরটি সর্বদা 'হ্যাঁ' থাকে না, যদি না কোনও বাগ থাকে) তবে আপনার কোডটির প্রয়োজন হয় বা না দরকার তা বিবেচনা না করে সম্মতি-সম্পর্কিত ওভারহেড থাকবে।

রাউন্ড-আপ: আরএক্সজাভা স্ট্রিম থেকে উল্লেখযোগ্যভাবে পৃথক। রিয়েল আরএক্সজাভা বিকল্পগুলি রিঅ্যাকটিভ স্ট্রিমগুলির অন্যান্য বাস্তবায়ন , যেমন আককার প্রাসঙ্গিক অংশ।

আপডেট । এর জন্য অ-ডিফল্ট কাঁটাচামচ পুল ব্যবহার করার কৌশল আছে Stream#parallel, জাভা 8 সমান্তরাল স্ট্রিমের কাস্টম থ্রেড পুল দেখুন

আপডেট । উপরের সমস্তটি আরএক্সজাভা ১.x এর অভিজ্ঞতার ভিত্তিতে তৈরি এখন যেহেতু আরএক্সজাভা ২.x এখানে রয়েছে , এই উত্তরটি পুরানো হতে পারে।


2
স্ট্রিমগুলি নির্মাণ করা কেন শক্ত? এই নিবন্ধ অনুসারে, এটি সহজ বলে মনে হচ্ছে: oracle.com/technetwork/articles/java/…
ইগোরগানপলস্কি

2
বেশ কয়েকটি ক্লাস রয়েছে যার 'স্ট্রিম' পদ্ধতি রয়েছে: সংগ্রহ, ইনপুট স্ট্রিম, ডিরেক্টরি ফাইল ইত্যাদি But তবে আপনি যদি একটি কাস্টম লুপ থেকে একটি স্ট্রিম তৈরি করতে চান - তবে বলুন, ডাটাবেস কার্সারে পুনরাবৃত্তি করুন? আমি এখন অবধি খুঁজে পাওয়া সবচেয়ে ভাল উপায় হ'ল একটি ইলেটর তৈরি করা, এটি স্প্লিটেটরারের সাথে আবৃত করা এবং অবশেষে স্প্লিটরেটার থেকে স্ট্রিমসপোর্ট # প্রার্থনা করা। একটি সাধারণ কেস আইএমএইচও-র জন্য খুব বেশি আঠালো। স্ট্রিম.আইরেটও রয়েছে তবে এটি অসীম স্ট্রিম উত্পাদন করে। সেক্ষেত্রে চিৎকার কেটে ফেলার একমাত্র উপায় হ'ল স্ট্রিম # যেকোন ম্যাচ, তবে এটি একটি টার্মিনাল অপারেশন, সুতরাং আপনি স্ট্রিম প্রযোজক এবং ভোক্তাকে আলাদা করতে পারবেন না
কিরিল গামাজকভ ২৮

2
আরএক্সজাভাতে অবজারভেবল.ফর্মকল্যাবল, অবজারভেবলক্রেট এবং আরও কিছু রয়েছে। অথবা আপনি নিরাপদে অসীম পর্যবেক্ষণযোগ্য উত্পাদন করতে পারেন, তারপরে '.টেকইহাইল (শর্ত)' বলুন এবং আপনি এই ক্রমটি গ্রাহকদের কাছে
প্রেরণে

1
স্ট্রিমগুলি নিজের দ্বারা তৈরি করা শক্ত নয়। আপনি কেবল Stream.generate()নিজের Supplier<U>প্রয়োগটি কল করতে এবং পাস করতে পারেন , কেবলমাত্র একটি সহজ পদ্ধতি যা থেকে আপনি স্ট্রিমের পরবর্তী আইটেমটি সরবরাহ করেন। অন্যান্য পদ্ধতি প্রচুর আছে। সহজে একটি ক্রম গঠন করা Streamযে আগের মান আপনি ব্যবহার করতে পারেন উপর নির্ভর করে interate()পদ্ধতি, প্রত্যেক Collectionটি stream()পদ্ধতি এবং Stream.of()একটি নির্মান Streamএকটি ভারার্গস বা অ্যারে থেকে। শেষ StreamSupportপর্যন্ত স্প্লিটেটরেটর ব্যবহার করে বা স্ট্রিমের আদিম ধরণের জন্য আরও উন্নত স্ট্রিম তৈরির পক্ষে সমর্থন রয়েছে।
jbx

"স্ট্রিমে কাট-অফ ক্রিয়াকলাপের অভাব রয়েছে ( takeWhile(), takeUntil());" - জেডিকে 9 এর এইগুলি রয়েছে, আমি বিশ্বাস করি, টোকওয়াইল () এবং ড্রপওয়াইলে ()
আব্দুল

50

জাভা 8 স্ট্রিম এবং আরএক্সজাভা দেখতে বেশ একই রকম দেখাচ্ছে। তাদের দেখতে একই রকম অপারেটর রয়েছে (ফিল্টার, মানচিত্র, ফ্ল্যাটম্যাপ ...) তবে একই ব্যবহারের জন্য নির্মিত হয় না।

আপনি আরএক্সজাভা ব্যবহার করে অ্যাসিচোনাস কার্য সম্পাদন করতে পারেন।

জাভা 8 স্ট্রিমের সাহায্যে আপনি আপনার সংগ্রহের আইটেমগুলি অতিক্রম করবেন।

আপনি আরএক্সজাভাতে খুব একই জিনিস করতে পারেন (কোনও সংগ্রহের ট্র্যাভারস আইটেম) তবে, যেমনটি আরএক্সজাভা সাম্প্রতিক টাস্কে মনোনিবেশ করা হয়েছে, ... এটি সিঙ্ক্রোনাইজেশন, ল্যাচ ব্যবহার করে ... সুতরাং আরএক্সজেভা ব্যবহার করে একই কাজটি ধীর হতে পারে may জাভা 8 স্ট্রিম সহ।

আরএক্সজাভা এর সাথে তুলনা করা যেতে পারে CompletableFutureতবে এটি কেবল একটি মানের চেয়ে বেশি গণনা করতে সক্ষম হতে পারে।


12
স্ট্রিম ট্র্যাভারসাল সম্পর্কে আপনার বক্তব্যটি মূল্যবান বলে মনে করা কেবলমাত্র অ-সমান্তরাল প্রবাহের জন্যই সত্য। parallelStreamসহজ traversals এর অনুরূপ সিঙ্ক্রোনাইজেশন সমর্থন / মানচিত্র / ফিল্টারিং ইত্যাদি ..
জন Vint

2
আমি মনে করি না "সুতরাং আরএক্সজাভা ব্যবহার করা একই কাজ জাভা 8 স্ট্রিমের চেয়ে ধীর হতে পারে।" এটি সর্বজনীনভাবে সত্য ধারণ করে, এটি ভারতে হাতের কাজটির উপর নির্ভর করে।
দাসচল

1
আমি আনন্দিত যে আপনি বলেছিলেন যে আরএক্সজেভা ব্যবহার একই কাজ জাভা 8 স্ট্রিমের চেয়ে ধীর হতে পারে । এটি একটি খুব গুরুত্বপূর্ণ পার্থক্য যা অনেক RxJava ব্যবহারকারীদের অবগত নয়।
ইগোরগানাপলস্কি

আরএক্সজাভা ডিফল্টরূপে সিঙ্ক্রোনাস। আপনার বক্তব্যটিকে সমর্থন করার জন্য আপনার কোনও মানদণ্ড রয়েছে যা এটি ধীর হতে পারে?
মার্সিন কোজিস্কি

6
@ মার্সিন-কোজিস্কি আপনি এই মাপদণ্ডটি পরীক্ষা করতে পারেন: টুইটার.
com

37

কয়েকটি প্রযুক্তিগত এবং ধারণাগত পার্থক্য রয়েছে, উদাহরণস্বরূপ, জাভা 8 টি স্ট্রিমগুলি একক ব্যবহার, টান ভিত্তিক, মানগুলির সিঙ্ক্রোনাস সিকোয়েন্স যেখানে আরএক্সজাভা অবজার্ভেবলগুলি পুনরায় পর্যবেক্ষণযোগ্য, অভিযোজিতভাবে পুশ-পুল ভিত্তিক, সম্ভাব্য মানগুলির সম্ভাব্য অ্যাসিনক্রোনাস ক্রম। আরএক্সজাভা জাভা 6+ এর লক্ষ্য এবং এটি অ্যান্ড্রয়েডেও কাজ করে।


4
RxJava এর সাথে জড়িত সাধারণ কোডটি ল্যাম্বডাসের ভারী ব্যবহার করে যা জাভা 8 থেকে পাওয়া যায়। সুতরাং আপনি জাভা 6 এর সাথে
আরএক্স

1
অনুরূপ পার্থক্য হ'ল আরএক্স অবজারভেবলগুলি সাবস্ক্রাইব হওয়া অবধি অনির্দিষ্টকালের জন্য বেঁচে থাকতে পারে। জাভা 8 স্ট্রিমগুলি ডিফল্টরূপে ক্রিয়াকলাপ সহ সমাপ্ত হয়।
ইগোরগানাপলস্কি


কোটলিন রেট্রোফিটের চেয়েও যৌন দেখতে দেখতে
কিরিল গাজাজকভ

30

জাভা 8 স্ট্রিমগুলি পুল ভিত্তিক। আপনি প্রতিটি আইটেম গ্রাস করে একটি জাভা 8 স্ট্রিমের মাধ্যমে পুনরাবৃত্তি করুন। এবং এটি একটি অন্তহীন স্রোত হতে পারে।

আরএক্সজাভা Observableডিফল্ট পুশ ভিত্তিক। আপনি একটি পর্যবেক্ষণযোগ্যতে সাবস্ক্রাইব করে রেখেছেন এবং পরবর্তী আইটেমটি উপস্থিত হলে ( onNext), বা স্ট্রিমটি ( onCompleted) শেষ হলে বা কোনও ত্রুটি ঘটলে (আপনি onError) বিজ্ঞপ্তি পাবেন । সঙ্গে যেহেতু Observableআপনি পাবেন onNext, onCompleted, onErrorঘটনা, আপনি কিছু ক্ষমতাশালী ফাংশন বিভিন্ন মিশ্রন মত কি করতে পারেন Observableএকটি নতুন এক গুলি ( zip, merge, concat)। আপনি করতে পারেন এমন অন্যান্য জিনিস হ'ল ক্যাশিং, থ্রোটল্টিং, ... এবং এটি বিভিন্ন ভাষায় কম-বেশি একই এপিআই ব্যবহার করে (RxJava, R # C, RxJS, ...)

ডিফল্টরূপে আরএক্সজাভা একক থ্রেডযুক্ত। আপনি শিডিয়ুলার ব্যবহার শুরু না করা পর্যন্ত সবকিছু একই থ্রেডে ঘটবে।


স্ট্রিমে আপনার জন্য প্রতিটি আছে, এটি অনেক্সট থেকে বেশ অনেকটা একই
পল

আসলে, স্ট্রিমগুলি সাধারণত টার্মিনাল হয়। "একটি স্ট্রিম পাইপলাইন বন্ধ করে দেওয়া অপারেশনগুলিকে টার্মিনাল অপারেশন বলে। ~ Oracle.com/technetwork/articles/java/...
IgorGanapolsky

26

বিদ্যমান উত্তরগুলি ব্যাপক এবং সঠিক, তবে নতুনদের জন্য একটি সুস্পষ্ট উদাহরণের অভাব রয়েছে। আমাকে "পুশ / পুল-ভিত্তিক" এবং "পুনরায় পর্যবেক্ষণযোগ্য" এর মতো শর্তগুলির পিছনে কিছু কংক্রিট রাখার অনুমতি দিন। দ্রষ্টব্য : আমি এই শব্দটিকে ঘৃণা করি Observable(এটি স্বর্গের জন্য একটি স্রোত), তাই কেবল জে 8 বনাম আরএক্স স্ট্রিমগুলি উল্লেখ করবে।

পূর্ণসংখ্যার একটি তালিকা বিবেচনা করুন,

digits = [1,2,3,4,5]

একটি জে 8 স্ট্রিম সংগ্রহটি সংশোধন করার জন্য একটি ইউটিলিটি। উদাহরণস্বরূপ এমনকি অঙ্কগুলিও এ হিসাবে বের করা যেতে পারে,

evens = digits.stream().filter(x -> x%2).collect(Collectors.toList())

এটি মূলত জাফলার তুলনায় পাইথনের মানচিত্র, ফিল্টার, হ্রাস , খুব সুন্দর (এবং দীর্ঘতর ছাড়) addition তবে কী আগে যদি অঙ্কগুলি আগে না সংগ্রহ করা হত - অ্যাপটি চলাকালীন অঙ্কগুলি যদি স্ট্রিমিং করছিল - তবে আমরা কি রিয়েলটাইমে এমনকি এর সংখ্যাকে ফিল্টার করতে পারি?

কল্পনা করুন যে অ্যাপটি চলাকালীন একটি পৃথক থ্রেড প্রক্রিয়া এলোমেলো সময়ে পূর্ণসংখ্যাকে আউটপুট দিচ্ছে ( ---সময়কে বোঝায়)

digits = 12345---6------7--8--9-10--------11--12

হয়েছে RX সালে evenপারেন প্রতিক্রিয়া প্রতিটি নতুন অঙ্ক প্রয়োজন এবং রিয়েল টাইমে ফিল্টার প্রয়োগ করুন

even = -2-4-----6---------8----10------------12

ইনপুট এবং আউটপুট তালিকাগুলি সংরক্ষণ করার দরকার নেই। আপনি যদি কোনও আউটপুট তালিকা চান তবে কোনও সমস্যা এটি স্ট্রাইমেবল। আসলে, সবকিছুই একটি স্রোত।

evens_stored = even.collect()  

এই কারণেই "স্টেটলেস" এবং "ফাংশনাল" এর মতো শব্দগুলি আরএক্সের সাথে বেশি যুক্ত


তবে 5 টিও নয় ... এবং এটি দেখে মনে হচ্ছে জে 8 স্ট্রিমটি সমকালীন, যখন আরএক্স স্ট্রিমটি অবিচ্ছিন্ন?
ফ্র্যাঙ্কলিন ইউ

1
@ ফ্র্যাঙ্কলিনইউ ধন্যবাদ আমি 5 টি টাইপ ঠিক করেছি। সিঙ্ক্রোনাস বনাম অ্যাসিঙ্ক্রোহনের ক্ষেত্রে যদি কম চিন্তা করেন তবে এটি সঠিক হতে পারে এবং প্রয়োজনীয় বনাম কার্যকরী ক্ষেত্রে আরও বেশি। জে 8 এ, আপনি প্রথমে আপনার সমস্ত আইটেম সংগ্রহ করুন, তারপরে দ্বিতীয়টি ফিল্টার প্রয়োগ করুন। আরএক্স-এ আপনি ফিল্টার ফাংশনটি ডেটা থেকে আলাদা করে সংজ্ঞায়িত করেন এবং তারপরে এটি একটি উত্স উত্স (একটি লাইভ স্ট্রিম, বা জাভা সংগ্রহ) এর সাথে যুক্ত করেন ... এটি সম্পূর্ণ ভিন্ন প্রোগ্রামিং মডেল
অ্যাডাম হিউজেস

এতে আমি খুব অবাক হই। আমি বেশ নিশ্চিত যে জাভা স্ট্রিমগুলি ডেটা স্ট্রিমিংয়ে তৈরি করা যেতে পারে What আপনি বিপরীতটি কী ভাবেন?
ভিক সিডোব্লেইউ

4

আরএক্সজাভা প্রতিক্রিয়াশীল স্ট্রিম উদ্যোগের সাথেও ঘনিষ্ঠভাবে জড়িত এবং এটিকে নিজেকে প্রতিক্রিয়াশীল স্ট্রিম এপিআইয়ের একটি সাধারণ বাস্তবায়ন হিসাবে বিবেচনা করে (যেমন আক্কা স্ট্রিমগুলির প্রয়োগের সাথে তুলনা করে )। মূল পার্থক্যটি হ'ল, প্রতিক্রিয়াশীল স্ট্রিমগুলি ব্যাক প্রেসার হ্যান্ডেল করতে সক্ষম হওয়ার জন্য ডিজাইন করা হয়েছে, তবে যদি আপনার প্রতিক্রিয়াশীল স্ট্রিম পৃষ্ঠাগুলি একবার দেখে থাকেন তবে আপনি ধারণাটি পাবেন। তারা তাদের লক্ষ্যগুলি বেশ ভালভাবে বর্ণনা করে এবং স্ট্রিমগুলি প্রতিক্রিয়াশীল ইশতেহারের সাথেও নিবিড়ভাবে সম্পর্কিত ।

জাভা 8 স্ট্রিমগুলি স্ক্রিন স্ট্রিম বা ক্লোজার অলস সিকের মতো একইভাবে আনবাউন্ডেড সংগ্রহের প্রয়োগ বাস্তবায়িত ।


3

মাল্টিকোর আর্কিটেকচারের সুবিধার্থে জাভা 8 স্ট্রিমগুলি কার্যকরভাবে বড় সংগ্রহগুলির প্রক্রিয়াকরণ সক্ষম করে। বিপরীতে, আরএক্সজাভা ডিফল্টরূপে (সিডিউলার ছাড়াই) একক থ্রেডযুক্ত। সুতরাং আরএক্সজেভা মাল্টি-কোর মেশিনের সুবিধা নেবে না যদি না আপনি নিজের পক্ষে যুক্তিটি কোড করেন।


4
স্ট্রিমটি ডিফল্টরূপেও একক থ্রেডযুক্ত থাকে, যদি না আপনি অনুরোধ করেন (সমান্তরাল)। এছাড়াও, আরএক্স সম্মতিতে আরও নিয়ন্ত্রণ দেয়।
কিরিল গাজাজকভ 15

@ কিরিলগামাজকভ কোটলিন কর্টিনস প্রবাহ (জাভা 8 স্ট্রিমের উপর ভিত্তি করে) এখন কাঠামোগত সম্মতিটি
রেফারেন্স

সত্য, তবে আমি প্রবাহ এবং কাঠামোগত সম্মতি সম্পর্কে কিছুই বলিনি। আমার দুটি বিষয় ছিল: 1) আপনি স্পষ্টভাবে এটিকে পরিবর্তন না করলে স্ট্রিম এবং আরএক্স উভয়ই একক থ্রেডযুক্ত; 2)
আরএক্স আপনাকে স্ট্রিমের

"আপনার জন্য থ্রেড পুলের কী দরকার" প্রশ্নের প্রশ্নের সত্যতা আমি পাই না। যেমনটি আপনি বলেছেন, "সত্যিই বড় সংগ্রহগুলি কার্যকরভাবে কার্যকর করার জন্য"। অথবা হতে পারে আমি আইও-বদ্ধ কাজটি আলাদা থ্রেড পুলে চালাতে চাই। আপনার প্রশ্নের পিছনে উদ্দেশ্যটি আমি বুঝতে পেরেছি বলে আমি মনে করি না। আবার চেষ্টা কর?
কিরিল গামাজকভ 21

1
সময়সূচী শ্রেণিতে স্ট্যাটিক পদ্ধতি পূর্বনির্ধারিত থ্রেড পুল পেতে এবং এক্সিকিউটার থেকে একটি তৈরি করতে দেয়। দেখুন reactivex.io/RxJava/2.x/javadoc/io/reactivex/schedulers/...
কিরিল Gamazkov
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.