multi-stream processing - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۴۵ نفر آنلاین
۶۰ عضو و ۱۸۵ مهمان در سایت حاضرند

multi-stream processing

0 امتیاز
‌سلام دوستان

چند تا سوال درمورد ملزومات مالتی پراسسینگ داشتم ممنون میشم راهنمایم کنید

در مالتی استریم پراسسینگ برای اینکه تمامی فریم های استریم های را همزمان دریافت کنیم از مالتی ترد استفاده میکنیم.

آیا ضروری هست از queue استفاده کنیم ؟

شما فکر کنید ۱۵ استریم داریم هرکدام با 3fps - یعنی در هر ۳۳۰ میلی ثانیه هرکدام یک فریم بما میدهند حالا اگر بخش پردازش همه ی استریم ها کمتر از ۳۳۰ ثانیه طول بکشد باز نیازه از کیو استفده کنیم ؟ چون کیو یکم سربار داره بخاطر همین میگم.

۲− اگر PRODUCER frame rate از  consumer frame rate  بالاتر باشد قطعا فریم از دست خواهیم داد ایا در این شرایط باز به کیو نیاز داریم ؟

۳− همان طور که میدانید ریسایز کردن فریم ها تایم گیر هست بنظرتون لازمه که این بخش ریسایز کردن را در ترد هر frame capturing بزاریم یا اینکه یک ترد جداگانه برای ریسایز کردن فریم های استریم ها در نظر بگیریم؟
سوال شده اردیبهشت 27, 1399  بوسیله ی minimax (امتیاز 78)   5 20 27

1 پاسخ

+1 امتیاز
سلام

کلا یک مطلبی خدمتون عرض کنم لزوم استفاده از queue برای شما روشن شه.زمانی که capture فریم ها را می خونه باید فریم ها را نگهداری کنه و اغلب هم جهت نگهداری از صف یا صف چرخشی استفاده میشه.فازغ از اینکه این صف چطور قرار پردازش بشه اونو دیگه consumer تصمیم می گیره اگر consumer تک تردد باشه اغلب جدید ترین عنصر را برمیداره و صف را خالی می کنه و اگر مالتی تردد باشه هر تردد در لحظه t قدیمی ترین فریم را بر میداره و کسی هم به محتوی صف کاری نداره و اغلب موارد صف ها به صورت چرخشی هستند. در ضمن کیو هیچ سرباری نداره .

جواب سوال 3 همه طبق اصول SOLID در design pattern هم پیش بریم  هر کلاس باید وظیفه مشخص داشته باشه فکر نمی کنم دستکاری یا پردازش تصویر جزء وظایف کلاس capture باشه .

راه حل خیلی اصولیش میشه کلاس image dispatcher که فریم به اون تحویل داده میشه همه پروسس ها پروفایل خودشون رو به اون اعلام می کنن و اون به محض دریافت فریم تمامی نمونه تصاویر مورد نظر را بدون duplicate ایجاد می کنه
پاسخ داده شده اردیبهشت 27, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
ممنون از پاسخ تون
اگر ممکن است پاراگراف اخری را بیشتر توضیح دهید- ممنون
و اینکه شما موافق ایجاد یک ترد برای هر پراسس تصاویر هستید یا اینکه فقط یدونه main ترد کافیه برای همه ی پراسس ها؟

فرض کنید کلاس capture به تعداد استریم ها داخل ترد ها run  کردیم .
حالتی که من وقتی فریم ها را از تمامی تردها میگیرم و به قسمت پردازش میدهم (داخل main  ترد) cpu usage کمتری دارد اینکه وقتی یک ترد خاصی اختصاص میدهم که  فریم ها را از تردها بگیرد و تو صف قرار دهد و سپس واحد پردازش از صف به میران تعداد استریم ها از صف برمیدارد و پردازش میکند.

یه بحث دیگه ایی که هست بیایم به ازای هر استریم یک صف جداگانه ایی درنظر بگیریم و هر ترد که فریم خودش را از استریم گرفت داخل صف خودش قرار دهد یعنی اینجا به تعداد استریم ها باید صف جداگانه ایی ایجاد کنیم. نسبت به حالتی که این تردها فریم های خودشون را میگیرند در یک متغییری قرار میدهند و سپس یک ترد دیگری درنظر گرفته میشود که تمامی این فریمها رااز متغییرهای مربوط به خودشان میگیرد و در یک لیست قرار میدهد سپس این لیست را داخل یک صف مشترک میگذارد.
حالت دومی رویکرد بهتری دارد نسبت به اینکه به ازای هر استریم یک صف جداگانه ایی درنظر بگیریم چرا؟
...