احسب تكرار الحروف في النصوص باستخدام الحوسبة المتوازية.
التوازي يعني إنجاز مهام على التوازي يمكن أيضًا إنجازها بشكل تسلسلي. مثال شائع هو حساب تكرار الحروف. استخدم التوازي لحساب التكرار الكلي لكل حرف في مصفوفة من النصوص.
يدعم Go التزامن عبر «goroutines»، وهي تُبدأ بالكلمة المفتاحية go.
وهو أسلوب بسيط وخفيف وأنيق لتوفير دعم التزامن، ويُعدّ من أعظم نقاط قوة اللغة.
قد تلاحظ أنه رغم أن هذا التمرين يُسمّى تردد الحروف المتوازي، فإنك لا ترى مصطلح «التوازي» مستخدمًا كثيرًا في Go. يفضّل مطوّرو Go استخدام مصطلح التزامن لوصف إدارة عدة goroutines مستقلة («عمليات» أو «خيوط» في سياقات اللغات الأخرى). ورغم أن هذين المصطلحين يُستخدمان غالبًا بالتبادل، فإن مطوّري Go يحبّون الدقة التقنية، ويستخدمون «التزامن» عند الحديث عن تنفيذ goroutines الذي يبدو وكأنه يحدث في الوقت نفسه.
يمكننا أن نخطّط لأن تعمل برامجنا على نحو متوازٍ، وقد تبدو في بعض الأحيان وكأنها تعمل بالتوازي، لكننا دون معرفة دقيقة بسياق تنفيذ الكود لا نضمن سوى أن العمليات ستعمل على نحو متزامن. وبعبارة أخرى، قد تكون تُنفَّذ تتابعيًا بسرعة أكبر مما نستطيع تمييزه، لكن ليس في الوقت نفسه تمامًا.
لمعرفة المزيد، ألقِ نظرة على منشور The Go Blog: التزامن ليس توازيًا.
إذا كنت جديدًا على ميزات التزامن في Go، فإليك بعض المصادر التي تساعدك على البدء. نوصي بالاطلاع عليها قبل البدء في هذا التمرين:
وللتعمّق أكثر، يمكنك تجربة كتاب التزامن في Go بقلم @kat-co.
في هذا التمرين، لا تستطيع اختبارات الوحدة أن تحدد ما إذا كنت قد كتبت حلًّا متزامنًا جيدًا.
بدلًا من ذلك، من الأفضل أن تحلّ هذا التمرين محليًا وأن تشغّل اختبارات الأداء عبر go test -bench ..
وفي الحل الجيد، ينبغي أن ترى أن النسخة المتزامنة تُظهر عددًا أقل من النانو ثانية لكل عملية (ns/op) من النسخة التتابعية.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.
نستكشف الفروق بين التزامن والتوازي، ونطّلع على أساليب مختلفة تعتمدها لغات مثل JavaScript وGo وElixir وRust.