ভাগ করা মেমরি বনাম সকেটগুলির মাধ্যমে আন্তঃ প্রক্রিয়া যোগাযোগের পক্ষে কি কি?


9

আমি বুঝতে পারি যে ইন্টার প্রক্রিয়া যোগাযোগের জন্য আরও অনেক বিকল্পের মধ্যে দুটি হতে পারে:

  1. ভাগ করা মেমরি
  2. সকেট

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


একটি নতুন পদ্ধতি হ'ল ডি-বাস।
অট--

@ অট-- ডি-বাস কি ইউনিক্স ডোমেন সকেটগুলি ব্যবহার করে না?

@ ব্রায়ানমারশাল প্রকৃতপক্ষে, ডোমেন এবং টিসিপি / আইপি সকেট।
অট--

আছে: উত্তর এখানে খুব stackoverflow.com/a/1844919/632951
Pacerier

উত্তর:


11

আমার মাথার উপরের অংশের প্রতিটি জন্য কয়েকটি সুবিধা। মনে রাখবেন যে এই আইটেমগুলির কিছুগুলি সমস্ত ক্ষেত্রে প্রয়োগ নাও হতে পারে; এগুলি কেবল সাধারণ পর্যবেক্ষণ।

সকেট

সহজ এবং নিয়ন্ত্রিত। অল্প বা কোনও পরিবর্তন না করে প্রয়োজনীয়ভাবে নেটওয়ার্ক সকেটে প্রসারিত করা যেতে পারে। প্রোগ্রামিং মডেলটির সিরিয়ালাইজেশন প্রয়োজন, যার পরিবর্তে আপনার কী ভাবতে হবে যে ডেটা আসলে এ থেকে বিতে স্থানান্তরিত হয় সিঙ্ক্রোনাইজেশন প্রয়োজনীয়ভাবে যোগাযোগ ব্যবস্থায় অন্তর্নির্মিত; অন্য কোন সিঙ্ক্রোনাইজেশন প্রয়োজন।

ভাগ করা মেমরি

অগত্যা একটি সিস্কেল প্রয়োজন হয় না (সুতরাং সম্ভাব্য দ্রুত)। ভাগ করে নেওয়ার জন্য স্পষ্টভাবে ডেটা স্থানান্তর করার প্রয়োজন হয় না - প্রাপক পুনরুদ্ধার না করে এমন ডেটা উপলব্ধ করা যেতে পারে (প্রাপক ব্যবহার করবেন না এমন ডেটা স্থানান্তরিত ব্যান্ডউইথকে নষ্ট করতে হবে না)। কোনও সিরিয়ালাইজেশন / ডিসিরিয়ালাইজেশন পদক্ষেপের অর্থ যোগাযোগের ওভারহেডে কোনও সময় ব্যয় করা হয় না।


4
+1: সকেট বিতরণ সিস্টেমে স্কেল করে যেখানে ভাগ করা মেমরিটি আরও দ্রুত is
mouviciel

@tylerl ভাগ করা মেমরির জন্য কেন একটি সিস্টেল প্রয়োজন হয় না?
গীক

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

প্রযুক্তিগতভাবে আপনার যদি পাঠানো বিন্যাসে গন্তব্য কোনও কাঁচা বাইট স্ট্রিম গ্রহণ করতে পারে তবে আপনাকে কোনও সকেটের উপরে ডেটা সিরিয়ালাইজ করার দরকার নেই। বেশিরভাগ লোকেরা স্পষ্টতই সিরিয়ালাইজ করে যাতে তারা যে কাউকে প্রেরণ করতে পারে।
gbjbaanb

1
@gbjbaanb আমি মনে করি প্রযুক্তিগতভাবে আপনি ডেটা ক্রমিক করে তুলছেন যদি এটি বিটগুলির ক্রমিক স্ট্রিং হিসাবে সঞ্চারিত হয়, এনকোডিং কাঠামোটি যাই হোক না কেন।
টাইলার

6

সকেট এক থেকে এক। আপনি একই জিনিস একাধিক প্রক্রিয়াতে প্রেরণ করতে চাইলে আপনার একাধিক সকেট প্রয়োজন need ভাগ করা মেমরির সাথে আপনার একাধিক পাঠক এবং একাধিক লেখক থাকতে পারে।

সকেটগুলি সংস্থান নিবিড় হয়। প্রতিটি বার্তা ওএসের মধ্য দিয়ে যায়। ভাগ করা মেমরির সাহায্যে আপনি ভাগ করে নেওয়া মেমরিটি ম্যাপ করেন তবে একবার আপনার অ্যাপ্লিকেশনটির স্মৃতিতে এবং তারপরে এটি আপনার ব্যবহারের। যাইহোক, আপনি ভাগ করা মেমরি ব্যবহার করার সময় আপনাকে এখনও ওএসের মধ্য দিয়ে যেতে হবে; নিচে দেখ.

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

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

সকেটগুলি ডেটা ভলিউমের জন্য কম পরিমাণে ডেটা, ভাগ করা মেমরির জন্য উদ্দিষ্ট। বিভিন্ন সমস্যা সমাধানের জন্য বিভিন্ন প্রক্রিয়া বিদ্যমান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.