اطلاعیه

Collapse
No announcement yet.

حداكثر تعداد Thread

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • حداكثر تعداد Thread

    نياز داشتم كه براي يك اپليكشن تعداد ترد هاي زيادي را به صورت همزمان اجرا داشته باشم
    ولي ظاهرا يك محدوديت ذاتي براي حداكثر2000 ترد هست ( ضمن آزاد بودن cpu و ram بعد از اين تعداد Create Thread به مشكل بر ميخوره )
    من نياز به حداقل 50 هزار ترد همزمان دارم.
    چه راه حلي پيشنهاد ميكنيد براي حل اين مشكل ؟

  • #2
    میخوای ویروس بنویسی ؟ با چه زبانی هست ؟ ( دلفی یا سی پلاس + )
    توی c++ که میشه با SDL به نتایج خوبی رسید ، البته به سیستم عامل هم بستگی داره که چطور از این قابلیت بهره بگیره ، مثلا فدورا عالیه واسه Multi Threading
    Last edited by loader; 12-04-2011, 11:01 AM.
    اگر تنهاترین تنها شوم باز هم خدا هست

    Comment


    • #3
      اصلا خوندي چي نوشتم ؟

      Comment


      • #4
        این مشکلی تو داری جوکر جان مربوط میشه به لینکرت که اندازه ی پشته رو ۱ مگ تعریف کرده که ۲۰۰۰ تاش میشه ۲ گیگ حدودا......

        لینک زیر رو نگاه کن ....
        http://blogs.msdn.com/b/oldnewthing/...29/444912.aspx
        Shabgard становится полностью дерьмо

        Comment


        • #5
          قبل از اينكه بپرسم ، گوگل را زيرو رو كردم
          با استفاده از stack_size_param_is_a_reservation حداكثر به 4هزارتا ترد تونستم برسم

          دنبال يه راه حل هستم.

          پيوست : هم روي 32 و هم روي سيستم 64بيتي دو هسته اي تست گرفتم ، فرقي نداشت نتيجه.

          Comment


          • #6
            نوشته اصلی توسط joker نمایش پست ها
            قبل از اينكه بپرسم ، گوگل را زيرو رو كردم
            با استفاده از stack_size_param_is_a_reservation حداكثر به 4هزارتا ترد تونستم برسم

            دنبال يه راه حل هستم.

            پيوست : هم روي 32 و هم روي سيستم 64بيتي دو هسته اي تست گرفتم ، فرقي نداشت نتيجه.
            ببین اساسا هیچگونه محدودیتی برای ایجاد تریاد تعریف نشده*!! محدودیتی که به وجود میاد مربوط میشه به مقدار حافظت... اون سیستم ذغالی که داری روش کار میکنی ۴گیگ رم بیشتر نداره!؟
            مجبورم کردی برم قسمت thread کتاب modern operating systems رو دوباره بخونم
            ببین تو باز سایز پشته رو هم بکنی مثلا ۴کیلو ... باز ۶۴ کیلو میگیره ... (http://blogs.msdn.com/b/oldnewthing/.../08/55239.aspx)
            که فکر کنم حداقل ۳گیگ حافظه ی خالی نیاز داری*!!!!! از طرفی دهنه Garbage Collector رو سرویس میکنی !!!!

            توی همون لینک هم همین حرف رو زده و یارو تا ۱۳۰۰۰ تا هم رفته

            البته اینو هم بگم خیلی از تریاد ها بلاک میشن و کلی بلای دیگه سرشون میاد که الگوریتم های زمان بندی ویندوز این بلاهارو سرشون میاره !!!...
            Last edited by BioHazard; 12-04-2011, 03:00 PM.
            Shabgard становится полностью дерьмо

            Comment


            • #7
              به نظر من ... یک سیستم پیدا کن روش ۸گیگ رم باشه و حدودا ۵ گیگ خالی داشته باشه !! سایز پشته هم ۶۴ کیلو تعریف کن..... بعد بزن بیوفته توی حلقه هی تریاد بزنه ببین چندتا ساخته میشه.....
              Shabgard становится полностью дерьмо

              Comment


              • #8
                سلام

                بهتره نتايج اجراي برنامه Testlimit رو در اين مقاله دنبال كنيد

                Pushing the Limits of Windows: Processes and Threads
                http://blogs.technet.com/b/markrussi...8/3261309.aspx

                لينك برنامه از خود سايتش انگار حذف شده ( من نديدم )
                http://www.demalaga.com/descargas/Sy...dowsInternals/

                ---------------------------------------
                Linux and the maximum number of processes (threads)
                http://kavassalis.com/2011/03/linux-...esses-threads/


                برا سي OpenMP توصيه ميشه

                Hello My Angel

                Comment


                • #9
                  توي تستها چه 1 ترد چه 4000 تا ، حافظه همچنان آزاد باقي ميمونه ( روي 4هزار ترد ، حافظه اي حدود 200 مگ اشغال ميكنه ) و روي يك سيستم با 2 گيگ رم ، همچنان 2/3 فضاي حافظه آزاد باقي ميمونه

                  کد PHP:
                  unit Unit1;

                  interface

                  uses
                    Windows
                  MessagesSysUtilsVariantsClassesGraphicsControlsForms,
                    
                  DialogsStdCtrls;

                    const
                      
                  STACK_SIZE_PARAM_IS_A_RESERVATION DWORD = $00010000;

                  type
                    TForm1 
                  = class(TForm)
                      
                  Button1TButton;
                      
                  Memo1TMemo;
                      
                  procedure Button1Click(SenderTObject);
                    private
                      { Private 
                  declarations }
                    public
                      { Public 
                  declarations }
                    
                  end;

                  var
                    
                  Form1TForm1;
                      
                  hStartEvent THANDLE 0;
                      
                  i           integer;
                      
                  thid        cardinal;

                  function 
                  NtCurrentTeb() : pointerstdcallexternal 'ntdll';
                  //function SetThreadStackGuarantee(staksize:integer):boolean stdcall; external 'kernel32.dll';


                  implementation

                  {$R *.dfm}

                  function 
                  ThreadProc(iThread cardinal): DWORDstdcall;
                  begin
                   
                  //   Form1.memo1.Lines.Add((format('Thread : %8d, Stack : %08p, TEB : %08p',
                  //                [iThread, @iThread, NtCurrentTeb()])));
                      
                  SetEvent(hStartEvent);
                      
                  Sleep(INFINITE);
                      
                  result := 0;
                  end;


                  procedure TForm1.Button1Click(SenderTObject);
                  begin
                  //SetThreadStackGuarantee(1000);

                      
                  hStartEvent := CreateEvent(0FALSEFALSE0);
                      for 
                  := 0 to 10000 do begin
                  if (CreateThread(nil512*1024, @ThreadProcPOINTER(i), STACK_SIZE_PARAM_IS_A_RESERVATIONthid) = 0then break;

                  //        WaitForSingleObject(hStartEvent, INFINITE);
                      
                  end;
                      
                  CloseHandle(hStartEvent);

                      
                  memo1.Lines.Add('press enter...');


                  end;

                  end

                  Comment


                  • #10
                    والا تا اونجایی که یادمه یکی از عوامل مهم توی تریاد ها و محدودیتشون مقدار حافظه ی رم هست..... حالا تریاد ساخته میشه ... ولی دلیلی نداره که در حال کار کردن باشه یا کل حافظه ی اختصاصیش مورد استفاده قرار بگیره....... میخوام یک چیزی بگم نمیدونم درسته یا نه شک دارم....



                    اون لینکایی که ویکتور هوگو () گزاشت رو نگاه کن !!! من الان میترسم یک حرفی بزنم.. ۲ ۳ نفر بیان دری وری تحویل بدن !!!
                    ولی اون Testlimit بالا چیز جالبی بود مخصوصا نتیجه ش روی ۶۴ بیتی !!!
                    Last edited by BioHazard; 12-04-2011, 03:30 PM.
                    Shabgard становится полностью дерьмо

                    Comment


                    • #11
                      با برنامه testlimit مشكلي نداره ، روي 32 بيتي ، فقط سيستم كند ميشه ولي ميره تا خفه بشه ( 30هزارتا)

                      روي 64بيتي هم تا 72 هزارتا رفت. ( كه براي من فعلا كافيه )
                      فایل های پیوست شده

                      Comment


                      • #12
                        برای ایجاد نخ در برنامه مهمترین اصل بر میگرده به ماهیت پروسه و سیستم عامل مورد استفاده
                        در صورتی که شما پروسه رو به حالت ممتاز ببرید این امکان رو دارید که بالاترین حد ممکن و قابل پشتیبانی سیستم عامل رو ایجاد کنید
                        اما از اونجا که برای سوئیچ بین نخ ها مدت زمان ناچیزی هم برای بررسی tcb صرف میشه باید این مورد رو هم در نظر داشته باشی که از یک پردازنده ای باید استفاده بشه که بالاترین حد بهره وری رو داشته باشه و عموما نیاز به میزان حافظه بالایی نیست.
                        این نکته قابل ذکر که تمام حد ایجاد نخ به سطح قابل پشتیبانی سیستم عامل بر میگردد.
                        Last edited by c3phalex1n; 12-04-2011, 04:36 PM.
                        انقدر نشد چشمه از پاسخ سنگ سرد، به رفتن در اسِتاد و اِبرام کرد
                        بسی کَند و کاوید و کوشش نمود، کز آن سنگ خارا رهی برگشود
                        ملک الشعرای بهار
                        My Blog : c3phalex1n.blogspot.com

                        سایت جنبش مصاف، علی اکبر رائفی پور : http://masaf.ir
                        خدا خیرش بده واقعا، تا حالا ندیده بودم کسی اینقدر برای جوُنا زحمت بکشه.

                        Comment


                        • #13
                          با اين روش محدوديت تعداد ترد حذف شد
                          کد PHP:
                          CreateThreadnil,20480, @ThreadProcnil,CREATE_SUSPENDED or STACK_SIZE_PARAM_IS_A_RESERVATION thid) ; 
                          ولي يه چيز عجيب پيش اومده ، روي سيستم 32 بيتي مشكلي نداره ، اما روي سيستم 64 بيتي حداكثر5984 تا ترد ميسازه.!!!
                          روي همان كامپيوتر(سخت افزار) با ويندوز 32 بيتي ، بازهم تردها به تعداد مورد نظر ساخته ميشه ، ولي 64 بيتي كه ميشه محدود ميشه
                          اگه برعكسش بود تعجبي نداشت، علتش برام نامعلومه

                          Comment


                          • #14
                            نوشته اصلی توسط joker نمایش پست ها
                            با اين روش محدوديت تعداد ترد حذف شد
                            کد PHP:
                            CreateThreadnil,20480, @ThreadProcnil,CREATE_SUSPENDED or STACK_SIZE_PARAM_IS_A_RESERVATION thid) ; 
                            ولي يه چيز عجيب پيش اومده ، روي سيستم 32 بيتي مشكلي نداره ، اما روي سيستم 64 بيتي حداكثر5984 تا ترد ميسازه.!!!
                            روي همان كامپيوتر(سخت افزار) با ويندوز 32 بيتي ، بازهم تردها به تعداد مورد نظر ساخته ميشه ، ولي 64 بيتي كه ميشه محدود ميشه
                            اگه برعكسش بود تعجبي نداشت، علتش برام نامعلومه
                            روشی که زدی همون روشی که تو عکس بوددیگه ... ولی سیستم ۶۴ بیتی حدود ۸ ترابایت user-space address داره و نباید همچین مشکلی پیش بیاد*!!! یک بار دیگه اون برنامه رو روی سیستم ۶۴ بیتی دیباگ کن .... شاید فرق داشته باشه
                            Shabgard становится полностью дерьмо

                            Comment


                            • #15
                              لطفا اين فايل را دانلود و اجرا كنيد عدد 30 هزار را مثلا تغيير بدن به 60 و 120 هزار و كليد make را بزنند
                              اگه توي تسك منيجر برويد و در منوي View - Select Columns... را انتخاب كنيد ميتونند تيك Thread Count را بزنيد و ببينيد چند تعداد ترد براي اين برنامه ساخته ميشه ،

                              اللخصوص دوستاني كه سي پي يو 2 هسته اي به بالا و ويندوز 64 بيتي دارند ميشه يه تستي برام بزنن؟

                              Comment

                              Working...
                              X