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

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

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

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

مثال‌ها 
در زبان برنامه‌نویسی جاوا، این دو مفهوم (یک واحد از اجرا و یک واحد از کار) در زمانی که با ریسمان‌ها به صورت مستقیم کار می‌کنیم در هم در میامیزند، اما در   Executers freamwork به وضوح قابل تمیز هستند: زمانی که شما به صورت مستقیم با نخ‌ها کار می‌کنید، یک نخ(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 استفاده می‌کند. در مقابل، اصطلاح " صف وظایف " معمولاً به معنای "واحد کار" استفاده می‌شود.

جستارهای وابسته 
 موازی کاری
 صف کار

منابع 

واژگان رایانه