গো কোন ধরণের আবর্জনা সংগ্রহ ব্যবহার করে?


111

গো একটি আবর্জনা সংগ্রহ করা ভাষা:

http://golang.org/doc/go_faq.html#garbage_collection

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

এটি এখনও মার্ক-সুইপ? এটা কি রক্ষণশীল বা নির্ভুল? এটা কি প্রজন্মের?


2
জুলাই 2018 এর মধ্যে গো আবর্জনা সংগ্রহকারীর ইতিহাসের দীর্ঘ আলোচনার জন্য, দেখুন blog.golang.org/ismmkeynote
ওয়াইল্ডকার্ড

উত্তর:


117

গো 1.4+ জঞ্জাল সংগ্রহকারীর পরিকল্পনা:

  • হাইব্রিড স্টপ-দ্য ওয়ার্ল্ড / সমবর্তী সংগ্রহকারী
  • স্টপ দ্য ওয়ার্ল্ড অংশ 10 মিমি সময়সীমা দ্বারা সীমাবদ্ধ
  • সি পি ইউ কোর সমবর্তী কালেক্টর চালনার জন্য উত্সর্গীকৃত
  • ট্রাই-কালার মার্ক-এবং-সুইপ অ্যালগরিদম
  • অ উত্পাদনশীল
  • অ compacting
  • সম্পূর্ণ সুনির্দিষ্ট
  • প্রোগ্রামটি চারপাশে পয়েন্টারগুলি চলমান থাকলে অল্প ব্যয় করতে হবে
  • কম লেটেন্সি, তবে সম্ভবত 1.3 জিসির চেয়ে কম থ্রুটপুটও কম

Go 1.1 এর উপরে 1.3 টি আবর্জনা সংগ্রহকারী আপডেট করুন:

  • একযোগে ঝাড়ু (ছোট বিরতি বারে ফলাফল)
  • সম্পূর্ণ সুনির্দিষ্ট

যান 1.1 আবর্জনা সংগ্রহকারী:

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

যান 1.0 জন আবর্জনা সংগ্রহকারী:

  • Go 1.1 এর সমান, তবে বেশিরভাগ ক্ষেত্রে সুনির্দিষ্ট হওয়ার পরিবর্তে আবর্জনা সংগ্রহকারী রক্ষণশীল। রক্ষণশীল জিসি []] বাইটের মতো বিষয়গুলিকে উপেক্ষা করতে সক্ষম।

জিসির পরিবর্তে অন্য কোনওটি বিতর্কিত, উদাহরণস্বরূপ:

  • খুব বড় গাদা বাদে, প্রজন্মের জিসি সামগ্রিকভাবে দ্রুততর হবে কিনা তা স্পষ্ট নয়
  • প্যাকেজ "অনিরাপদ" পুরোপুরি সুনির্দিষ্ট জিসি এবং কমপ্যাক্ট জিসিকে কার্যকর করা শক্ত করে তোলে

এছাড়াও বর্তমান আবর্জনা সংগ্রাহকের সামঞ্জস্যতার একটি নির্দিষ্ট ডিগ্রি রয়েছে তাই এটি মাল্টি-কোর সিস্টেমগুলিতে দ্রুত চালাতে পারে।
uriel

3
@ ইউরিয়েল: হ্যাঁ, আমি আমার উত্তরে প্রথম আইটেমটিতে এটি উল্লেখ করেছি - পাঠ্য "(সমান্তরাল বাস্তবায়ন)"।

এই উত্তর কি এখনও বিদ্যমান?
কিম স্টেবল

সি # আবর্জনা সংগ্রাহক সুনির্দিষ্ট এবং সি # এ যেতে যেতে আপনি আঘাতের সদস্য এবং সি # এর অনিরাপদ মোড থাকতে পারেন তবে আমি নিশ্চিত নই যে এটি কীভাবে অনিরাপদ বাস্তবায়নের তুলনায় তুলনা করে
স্কাইড

3
1.5.x দিয়ে এই উত্তরের আপডেট সম্পর্কে কী ঠিক একটি ভাল ইতিহাস লগ করতে।
ইসমাইল

32

( Go 1.8 - Q1 2017 এর জন্য, নীচে দেখুন )

পরবর্তী যান 1.5 সমবর্তী গার্বেজ কালেকটর "গতি" করতে সক্ষম হচ্ছে জড়িত জিসি বলেন।
এখানে এই কাগজে উপস্থাপিত একটি প্রস্তাব রয়েছে যা এটি 1.5 এর জন্য তৈরি করতে পারে, তবে গো-তে জিসি বুঝতে সহায়তা করে।

আপনি 1.5 এর আগে রাজ্যটি দেখতে পারেন (ওয়ার্ল্ড স্টপ: এসটিডাব্লু)

Go 1.5 এর আগে, গো সমান্তরাল স্টপ-দ্য ওয়ার্ল্ড (এসটিডাব্লু) সংগ্রাহক ব্যবহার করেছে।
এসটিডাব্লু সংগ্রহে অনেকগুলি ডাউনসাইড রয়েছে, তবে এটি কমপক্ষে অনুমানযোগ্য এবং নিয়ন্ত্রনযোগ্য গাদা বৃদ্ধির আচরণ করে।

https://40.media.tumblr.com/49e6556b94d75de1050c62539680fcf9/tumblr_inline_nr6qq8D9FE1sdck2n_540.jpg

( গোফারকন 2015 এর উপস্থাপনা থেকে প্রাপ্ত ছবি " গো জিসি: 1.5 এর গোড়ার দিকে সমস্যা সমাধান করা ")

এসটিডাব্লু সংগ্রাহকের জন্য একমাত্র সুরের নোব ছিল "জিওজিসি", সংগ্রহের মধ্যে আপেক্ষিক স্তরের বৃদ্ধি। ডিফল্ট সেটিংস, 100%, পূর্ববর্তী সংগ্রহের তুলনায় লাইভ হ্যাপের আকারের তুলনায় গাদা আকারটি দ্বিগুণ করে প্রতিবার জঞ্জাল সংগ্রহকে ট্রিগার করে:

https://docs.google.com/drawings/image?id=sLJ_JvGfPfPnojLlEGLCWkw&rev=1&h=113&w=424&ac=1

এসটিডাব্লু সংগ্রহে জিসি সময়।

Go 1.5 সমবর্তী সংগ্রহকারীর সাথে পরিচয় করিয়ে দেয় ।
এটি এসটিডাব্লু সংগ্রহের তুলনায় অনেক সুবিধা রয়েছে তবে এটি নিয়ন্ত্রণের জন্য আরও বেশি শক্ত বিকাশ করছে কারণ আবর্জনা সংগ্রাহক চলমান থাকাকালীন অ্যাপ্লিকেশনটি মেমরি বরাদ্দ করতে পারে

https://40.media.tumblr.com/783c6e557b427a5c023520578740eb94/tumblr_inline_nr6qqpmaJx1sdck2n_540.jpg

( গোফারকন 2015 এর উপস্থাপনা থেকে প্রাপ্ত ছবি " গো জিসি: 1.5 এর গোড়ার দিকে সমস্যা সমাধান করা ")

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

  • সংগ্রাহককে খুব তাড়াতাড়ি শুরু করুন, এবং অ্যাপ্লিকেশনটি সিপিইউ সংস্থানগুলি নষ্ট করে, অনেক বেশি আবর্জনা সংগ্রহ করবে।
  • সংগ্রাহকটি খুব দেরিতে শুরু করুন এবং অ্যাপ্লিকেশনটি পছন্দসই সর্বাধিক গাদা বৃদ্ধি ছাড়িয়ে যাবে।

সম্মতি ত্যাগ না করে সঠিক ভারসাম্য অর্জনের জন্য আবর্জনা সংগ্রহকারীকে সাবধানে প্যাক করা দরকার।

জিসি প্যাসিংয়ের লক্ষ্য দুটি মাত্রা বজায় রেখে অনুকূল করা: গাদা বৃদ্ধি এবং আবর্জনা সংগ্রহকারী দ্বারা ব্যবহৃত সিপিইউ।

https://docs.google.com/drawings/image?id=sEZYCf7Mc0E0EGmy4gho3_w&rev=1&h=235&w=457&ac=1

জিসি প্যাসিংয়ের নকশায় চারটি উপাদান রয়েছে:

  1. কোনও জিসি চক্রের স্ক্যানিং কাজের পরিমাণের জন্য একটি অনুমানকারী প্রয়োজন,
  2. উত্তোলনকারীদের জন্য স্তূপ বরাদ্দের সময় স্তরের লক্ষ্যে পৌঁছানোর সময় অনুসারে স্ক্যানিং কাজের আনুমানিক পরিমাণ সঞ্চালনের একটি প্রক্রিয়া,
  3. পটভূমি স্ক্যান করার জন্য একটি শিডিয়ুলার যখন মিউটর সিপিইউ বাজেটের উপকারে সহায়তা করে এবং
  4. জিসি ট্রিগারটির জন্য একটি আনুপাতিক নিয়ামক।

নকশা সময়ের দুটি ভিন্ন মতামতকে ভারসাম্য দেয় : সিপিইউ সময় এবং হিপ সময়

  • সিপিইউ সময় স্ট্যান্ডার্ড ওয়াল ক্লক টাইমের মতো তবে GOMAXPROCSসময়ের চেয়ে দ্রুত গতিতে চলে ।
    অর্থাৎ, যদি GOMAXPROCS8 হয়, তবে আটটি সিপিইউ সেকেন্ড প্রতিটি প্রাচীর দ্বিতীয় পাস করে এবং জিসি প্রতিটি প্রাচীরের দ্বিতীয় সেকেন্ডে সিপিইউ সময় পায় of
    সিপিইউ শিডিয়ুলার সিপিইউ সময় পরিচালনা করে।
  • হিপ সময় উত্তরণকে বাইটে পরিমাপ করা হয় এবং মিউটেটরগুলি বরাদ্দ করার সাথে সাথে এগিয়ে যায়।

গাদা সময় এবং প্রাচীর সময়ের মধ্যে সম্পর্ক বরাদ্দ হারের উপর নির্ভর করে এবং ক্রমাগত পরিবর্তন হতে পারে।
মিউটেটর হিপ সময়টি পরিচালনা করতে সহায়তা করে, নিশ্চিত করে যে গাদাটি লক্ষ্য আকারে পৌঁছানোর সময় অনুসারে স্ক্যানের কাজ শেষ হয়ে গেছে।
অবশেষে, ট্রিগার নিয়ামক একটি প্রতিক্রিয়া লুপ তৈরি করে যা সময়ের এই দুটি মতামতকে এক সাথে আবদ্ধ করে, হিপ সময় এবং সিপিইউ উভয় লক্ষ্যকেই অনুকূল করে।


20

এটি জিসির বাস্তবায়ন:

https://github.com/golang/go/blob/master/src/runtime/mgc.go

উত্সে থাকা দস্তাবেজগুলি থেকে:

জিসি মিউটরেটে থ্রেডের সাথে একযোগে চলমান, টাইপ নির্ভুল (ওরফে অবিকল), একাধিক জিসি থ্রেডকে সমান্তরালে চলতে দেয়। এটি একটি যুগল চিহ্ন এবং ঝাড়ু যা একটি লেখার বাধা ব্যবহার করে। এটি অ-জেনারাল এবং অ-সংক্ষিপ্তকরণ। সাধারণ ক্ষেত্রে লকগুলি অপসারণ করার সময় বিভাজন হ্রাস করতে পি বরাদ্দ অঞ্চলে পৃথক আকার পৃথক করে ব্যবহার করে বরাদ্দ দেওয়া হয়।


8

"এসটিডাব্ল্যাক স্ট্যাক পুনরায় স্ক্যানিং বাদ দিন" প্রস্তাবনা সহ 1.8 জিসি গো আবার বিকশিত হতে পারে

Go 1.7 হিসাবে, আনবাউন্ডেড এবং সম্ভাব্য অ-তুচ্ছ স্টপ-দ্য ওয়ার্ল্ডের (এসটিডাব্লু) সময়ের এক অবশিষ্ট উত্স হ'ল পুনরায় স্ক্যান করা।

আমরা একটি হাইব্রিড রাইট বাধা যা ইউসাস-স্টাইল মুছে ফেলা লেখার বাধা [ইউয়াসা '90] এবং একটি ডিজকস্ট্র-স্টাইল সন্নিবেশ রচনার বাধা [ডিজকস্ট্র '78] এর সাথে সংযুক্ত করে পুনরায় স্ক্যান করার জন্য স্ট্যাকের প্রস্তাব রাখি ।

প্রাথমিক পরীক্ষাগুলি দেখায় যে এটি এসটিডব্লিউর সবচেয়ে খারাপ সময়কে 50 এর চেয়ে কমিয়ে আনতে পারে এবং এই পদ্ধতির ফলে এটি এসটিডব্লু চিহ্নের সমাপ্তি পুরোপুরি বাদ দিতে ব্যবহারিক হতে পারে।

ঘোষণা এখানে এবং আপনি দেখতে পারেন প্রাসঙ্গিক উৎস কমিট হয় d70b0fe এবং তার আগে।


3

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


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