وظیفه (رایانش)

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از وظیفه (محاسبات))
یک نمونه از استخر ریسمان (باکس‌های سبز) با صف‌های وظیفه از وظیفه‌های منتظر (آبی) و کارهای تکمیل شده (زرد) دراین جا وظیفه به معنای «واحد کار» است.

یک وظیفه[۱] (به انگلیسی: task) در رایانش، واحدی از اجرا یا واحدی از کار است. این واژه مبهم است، برخی اصطلاحات جایگزین عبارتند از فرایند، روند سبک‌وزن، ریسمان (برای اجرا)، گام، درخواست یا پرس و جو (برای کار). در نمودار مجاور، صف کارهای ورودی برای انجام کار، کارهای انجام شده و استخری ریسمان برای انجام کار وجود دارد. خود واحد کار یا ریسمان‌هایی که کار را انجام می‌دهند می‌توانند به عنوان 'وظیفه ها' خوانده شوند. صف‌های ورودی، صف‌های خروجی و ریسمان‌هایی که کار را انجام می‌دهند می‌توانند به ترتیب به عنوان درخواست‌ها / پاسخ‌ها / رشته‌ها، وظایف ورودی /وظایف تکمیل شده/ رشته‌ها (همان‌طور که نمایش داده شده) یا درخواست‌ها / پاسخ‌ها / وظایف نیز معرفی شود.

واژه‌شناسی[ویرایش]

(برخی از قسمت‌هایی که وظیفه به معنای «واحد اجرا» به کار رفته‌است) در برخی از سیستم عامل‌ها، یک کار مترادف با یک فرایند است [نیازمند منبع]، و در بقیه با رشته‌ها هم‌معنی است. [نیازمند منبع] در اجراهایی که در ارتباط نیستند (پردازش دسته ای)یک وظیفه یک واحد از اجرا است که داخل یک کار است،[۲][۳] با اینکه وظیفه به‌طور معمول یک فرایند است. اساساً اصطلاح " چند وظیفه ای" اشاره دارد به اجرای چندین وظیفه در یک زمان اما تفاوت ظریفی با کار دارد که نشان می‌دهد که چندین وظیفه در یک زمان در حال اجرا هستند.

(برخی از قسمت‌هایی که وظیفه به معنای "واحد کار" به کار رفته‌است) در یک کار (یک قطعه کار) وظیفه می‌تواند مشابه یک گام باشد (خود گام نه، اجرای آن)، در حالی که در پردازش دسته ای وظیفه‌های منفرد می‌توانند متناظر با با یک قدم از پردازش یک آیتم در یک دسته (بچ) یا به یک قدم از پردازش تمام آیتم‌ها در یک دسته باشند. در سیستم‌های آنلاین، وظایف اغلب به یک درخواست منفرد (در معماری درخواست-پاسخ) یا پرس و جو (در بازیابی اطلاعات)، یا یک مرحله از بررسی، یا بررسی گسترده سیستم اطلاق می‌شود.

مثال‌ها[ویرایش]

در زبان برنامه‌نویسی جاوا، این دو مفهوم (یک واحد از اجرا و یک واحد از کار) در زمانی که با ریسمان‌ها به صورت مستقیم کار می‌کنیم در هم در میامیزند، اما در Executers freamwork به وضوح قابل تمیز هستند:

When you work directly with threads, a Thread serves as both a unit of work and the mechanism for executing it. In the executor framework, the unit of work and the execution mechanism are separate. The key abstraction is the unit of work, which is called a task.[۴]

زمانی که شما به صورت مستقیم با نخ‌ها کار می‌کنید، یک نخ(Thread)هم واحدی از کار و هم مکانیزمی برای اجرا آن را آماده می‌کند. در Executer freamwork، یک واحد از اجرا و یک واحد از کار مستقل هستند. کلید جداسازی این است که واحدی از کار، به عنوان وظیفه نامیده می‌شود.

واژه‌شناسی IBM[ویرایش]

اصطلاحاتی که IBM استفاده می‌کند دارای نفوذ است، گرچه اصطلاح دارای گنگی باشد، در اصطلاح IBM یک وظیفه دارای چندین معنای بخصوص است، شامل:

  • یک واحدی از کار که یک قدم در فرایند را نشان می‌دهند.
  • یک واحدی از کار که به وسیله ابزار یا فرایند کامل می‌شوند.
  • یک فرایند و روش‌هایی که فرایند را اجرا می‌کنند.
  • مجموعه ای از اقدامات طراحی شده برای دستیابی به یک نتیجه خاص. یک وظیفه بر روی یک مجموعه ای از اهداف در یک برنامه خاص انجام می‌شود
  • یک واحد محاسبات. در یک کار موازی، دو یا چند وظیفه همزمان کار می‌کنند که با هم از طریق عبور پیام و اشتراک حافظه ارتباط دارند. هرچند متداول است که به یک وظیفه یک پردازنده فیزیکی یا منطقی اختصاص داده شود، اصطلاح «وظیفه» و «پردازنده» در اصطلاح قابل جایگزینی با یک دیگر نیستند.
  • فعالیتی که ارزش تجاری دارد، توسط یک کاربر آغاز شده و توسط نرم‌افزار انجام می‌شود.

در z / OS مخصوصاً، به صورت دقیقاً تعریف شده‌است:[۵]

  • "در محیط چند برنامه ریزی یا چند پردازش، یک یا چند توالی از دستورالعمل‌ها توسط یک برنامه کنترل به عنوان یک عنصر از کار تلقی می‌شود که توسط یک کامپیوتر انجام می‌شود. "

اصطلاح وظیفه در OS/360 از طریق Z/os تقریباً معادل فرایند سبک‌وزن است؛ وظایف در یک مرحله از کار فضای آدرس را به اشتراک می‌گزارند. با این حال، در MVS/ESA از طریق z/OS، یک وظیفه یا بلوک درخواست سرویس (Service Request Block) ممکن است از طریق لیست دسترسی آن به سایر آدرس‌های فضای مجاز دسترسی داشته باشد.

هسته لینوکس[ویرایش]

اصطلاح وظیفه در هسته لینوکس (حداقل از v2.6.13،[۶] تا v4.8[۷])، که به واحدی از اجرا اشاره دارد، استفاده می‌شود، که این وظیفه ممکن است توسط منابع مختلف سیستم با وظیفه‌های دیگر در سیستم به اشتراک گذاشته شود. بسته به میزان به اشتراک گذاری، ممکن است به عنوان یک فرایند یا ریسمان محسوب شود. وظیفه‌ها با استفاده از دستور clone()[۸] به وجود می‌آیند که در آن کاربر می‌تواند میزان دلخواه اشتراک گذاری منابع را مشخص کند.

تاریخ[ویرایش]

واژه وظیفه برای یک قسمت از زمان کار برای چند برنامه گی در اوایل دهه ۱۹۶۰ به کار برده می‌شد، این مثال برای سال ۱۹۶۱ است:

مدل سریال توانایی اجرای وظیفه‌ها از یک کار در شیوه‌های مختلف شبیه به عملکرد IBM 709 را دارد.

این اصطلاح با معرفی OS / 360 (در سال ۱۹۶۴) محبوبیت داشت که شامل خصوصیات چند برنامه‌نویسی با تعداد ثابتی از وظیفه‌ها (MFT) و چند برنامه‌نویسی با تعدادی از وظایف متغیر (MVT) بود. در این مورد، وظیفه‌ها با فرآیندهای سبک‌وزن شناسایی می‌شدند، یک شغل شامل تعدادی از وظایف و بعدها، وظیفه‌ها می‌توانستند زیر وظایف (در اصطلاحات مدرن، پروسه‌های فرزند) داشته باشند.

امروز اصطلاح "وظیفه" به صورت بسیار مبهم استفاده می‌شود. به عنوان مثال، مدیر وظیفه ویندوز (Windows Task Manager)مدیریت فرایندهای (در حال اجرا) را بر عهده دارد، در حالی که برنامه‌ریز ویندوز(Wnidows Task Scheduler) برنامه را برای اجرای در آینده زمان‌بندی می‌کند، آنچه که به‌طور سنتی به عنوان یک زمان‌بندی شناخته شده‌است، و از پسوند .job استفاده می‌کند. در مقابل، اصطلاح " صف وظایف " معمولاً به معنای "واحد کار" استفاده می‌شود.

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  1. «وظیفه» [رایانه و فنّاوری اطلاعات] هم‌ارزِ «task»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. دفتر چهارم. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۵۹-۱ (ذیل سرواژهٔ وظیفه)
  2. "What is task? - Definition from WhatIs.com". WhatIs.com. Retrieved June 11, 2015.
  3. "What are computer processes?". liutilities.com. Archived from the original on 21 October 2018. Retrieved June 11, 2015.
  4. Bloch, Joshua. Effective Java (Third ed.). p. p. 272, Item 68.
  5. Glossary of z/OS terms and abbreviations: T
  6. "include/linux/sched.h". GitHub.com. Linus Torvalds. August 29, 2005.
  7. "include/linux/sched.h". GitHub.com. Linus Torvalds. October 3, 2016.
  8. "clone, __clone2 - create a child process". July 17, 2016. Retrieved November 6, 2016.