مسیرها
/
Scala
Scala
/
تمرین‌ها
/
فراوانی موازی حروف
فراوانی موازی حروف

فراوانی موازی حروف

متوسط

دستورالعمل‌ها

فراوانی حروف را در متن‌ها با استفاده از محاسبات موازی بشمارید.

موازی‌سازی یعنی کارهایی را به‌صورت موازی انجام دهیم که می‌توان آن‌ها را به‌صورت متوالی هم انجام داد. یک مثال رایج، شمردن فراوانی حروف است.

برای محاسبه‌ی فراوانی کل هر حرف در فهرستی از متن‌ها، از موازی‌سازی استفاده کنید.

دستورالعمل‌های ویژه‌ی این مسیر

بر اساس این اصطلاح‌شناسی، باید برنامه‌ای «موازی» و «قطعی» بنویسید و (حتماً هم این کار را بکنید!) بگذارید Scala به جنبه‌ی «همروندی» رسیدگی کند. وگرنه ممکن است code شما به‌سرعت به‌هم‌ریخته و مستعد خطا شود، با انواع و اقسام bugهای بدِ همروندی. به‌ویژه اینکه برنامه‌تان ممکن است غیرقطعی شود، که در عمل یعنی: debug کردن، test کردن و استدلال درباره‌ی آن بسیار (در واقع، بسیار بسیار) دشوار می‌شود.

با این همه، شاید ایده‌ی خوبی باشد که اول یک راه‌حل متوالی بنویسید (و با test suite درستی‌اش را بررسی کنید). فقط پس از آن است که باید تلاش کنید آن را موازی کنید، در حالی که بخش‌های متوالی و موازی code شما را تا حد امکان جدا از هم نگه می‌دارید.

نخستین دور می‌تواند استفاده از مجموعه‌های موازی Scala باشد. ممکن است ببینید که این تقریباً بیش از حد ساده است (به‌ویژه اگر توصیه‌ی ما را گوش کرده باشید و از قبل یک راه‌حل متوالی داشته باشید).

برای دور دوم توصیه می‌کنیم راه‌حلی با scala.concurrent.Future را امتحان کنید. برای گرفتن کمی کمک می‌توانید به این آموزش و ادامه‌ی آن سر بزنید. مطمئن شوید که:

  • فقط یک فراخوانی مسدودکننده‌ی واحد برای انتظار نتیجه داشته باشید
  • آن درست در انتهای برنامه‌تان باشد
  • و مهلت زمانی داشته باشد.

scala.concurrent.Future در کتابخانه‌های زیادی به کار می‌رود و توصیه‌ی پزشک برای برنامه‌نویسی موازی و ناهمگام در Scala است. پس برای تسلط بر زبان ضروری است و باید بخشی از زرادخانه‌ی Scala شما شود.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Scala Exercism

آماده‌اید فراوانی موازی حروف را شروع کنید؟

در Exercism ثبت‌نام کنید تا Scala را همراه با 95 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.

بررسی عمیق فراوانی موازی حروف!

ما تفاوت‌های میان هم‌روندی و موازی‌سازی را بررسی می‌کنیم و به رویکردهای متفاوتی که زبان‌هایی مانند JavaScript، Go، Elixir و Rust در پیش می‌گیرند نگاه می‌کنیم.