iXdi - Σύγχρονος προγραμματισμός

Το ThreadPool δεν μπορεί να παρέχει νέο νήμα

Πρέπει να υποστηρίξω μια εφαρμογή επιφάνειας εργασίας που είχε εφαρμοστεί από άλλον προγραμματιστή. Η εφαρμογή έχει κάποιο «μαγικό» κωδικό και το TPL δεν λειτουργεί μετά την κλήση.

Νομίζω ότι κάποιος απέκλεισε τη λειτουργία του ThreadPool, αλλά δεν έχω ιδέα πώς να το βρω. Το ερώτημα είναι: Τι συμβαίνει στη μέθοδο VeryLargeBlackBoxMethod(); Πώς μπορώ να μάθω ποιος είναι ο λάθος κωδικός;

    [STAThread]
    public static void Main()
    {
        var testTimer = new System.Threading.Timer((s) => { Console.WriteLine("This code never run"); });
        testTimer.Change(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));

        PrintAvailableThreads();

        // ThreadPool can`t provide a new Task after this method executing
        VeryLargeBlackBoxMethod();

        PrintAvailableThreads();

        Task.Factory.StartNew(() => { Console.WriteLine("This code never run too"); });

        ThreadPool.QueueUserWorkItem((p) => { Console.WriteLine("And this code newer run"); });

        var thread = new Thread(() => { Console.WriteLine("But this code work"); });
        thread.Start();

        Console.ReadLine();
    }

    private static void PrintAvailableThreads()
    {  
        var work = 0;
        var completionThreads = 0;
        ThreadPool.GetAvailableThreads(out work, out completionThreads);
        Console.WriteLine("worker threads {0}, completionThreads {1}", work,         completionThreads);
    }

    // Console output:
    // worker threads 32767, completionThreads 1000
    // worker threads 32762, completionThreads 1000
    // But this code work

  • Θα μπορούσατε να χρησιμοποιήσετε κάτι σαν ανακλαστήρα, για να δείτε μέσα 04.04.2017
  • Χωρίς να κοιτάξετε μέσα στο VeryLargeBlackBoxMethod() είναι σχεδόν αδύνατο να μάθετε τι συμβαίνει. Εάν έχετε πρόσβαση στον πηγαίο κώδικα, θα έλεγξα αν υπάρχει ένας αριθμός μακροχρόνιων εργασιών που πρέπει να μετακινηθούν σε νήματα φόντου. Οι εργασίες προορίζονται για σύντομο εκτελούμενο κώδικα. 04.04.2017
  • η έναρξη ενός νέου νήματος και η χρήση του Task.Factory.StartNew (ή Task.Run) είναι διαφορετικά 04.04.2017
  • Εκτός ενδιαφέροντος, τι σημαίνει ThreadPool.GetMaxThreads επιστροφή; 04.04.2017
  • stackoverflow.com/questions/23216417/ 04.04.2017
  • @stuartd worker threads 32767, completionThreads 1000 Η εφαρμογή λειτουργεί καλά αν βάλω ThreadPool.SetMinThreads(100, 100); πριν από το VeryLargeBlackBoxMethod(); Αλλά δεν είναι λύση. 04.04.2017
  • Ποιες τιμές επιστρέφει το ThreadPool.GetAvailableThreads; 04.04.2017
  • @Rodrigo Vedovato, GetAvailableThreads: νήματα εργαζόμενου 32762, ολοκλήρωσηΝήματα 1000 04.04.2017
  • Αυτός είναι ένας πολύ τεράστιος αριθμός νημάτων. Μάλλον κόλλησαν να τσακώνονται ο καθένας, οπότε βρίσκεστε σε κατάσταση πείνας. 04.04.2017
  • @supertoha τι είναι αυτοί οι αριθμοί πριν την τεράστια μέθοδο; 04.04.2017
  • @supertoha, εκτελέστε την εφαρμογή στο πρόγραμμα εντοπισμού σφαλμάτων. Και θέστε την εφαρμογή σε παύση (δηλαδή Break All, Ctrl+Alt+Break). Μεταβείτε στο Debug -› Windows -› Threads και δείτε πού έχουν κολλήσει τα νήματα εργασίας. Είμαι πρόθυμος να στοιχηματίσω ότι υπάρχει αδιέξοδο. 05.04.2017

Νέα υλικά

Καθαρισμός δεδομένων, Επιλογή χαρακτηριστικών, Μοντελοποίηση και Ερμηνευσιμότητα
Ο καθαρισμός δεδομένων, η επιλογή χαρακτηριστικών, η μοντελοποίηση και η ερμηνευτικότητα είναι κρίσιμα βήματα για την ανάπτυξη ενός επιτυχημένου μοντέλου μηχανικής εκμάθησης. Τα ακριβή και..

Code Smell 210 - Dynamic Properties
Η τεμπελιά και η μαγεία φέρνουν ελαττώματα TL;DR: Να είστε ξεκάθαροι με τα χαρακτηριστικά σας Προβλήματα Ευανάγνωστο Ορισμός πεδίου εφαρμογής Απαρατήρητα τυπογραφικά λάθη..

Οπτικοποίηση δεδομένων με γραφήματα Google
του Ejiro Thankgod Η οπτικοποίηση δεδομένων είναι μια εξαιρετική προσέγγιση για την εμφάνιση δεδομένων και τη συμμετοχή κοινού. Ο ανθρώπινος νους είναι συχνά καλύτερος στο να θυμάται..

Το όνομά μου είναι Abdul Qudus.abd
Το όνομά μου είναι Abdul Qudus.abd Είμαι διαδικτυακός συγγραφέας και γράφω άρθρα. Έχω 3ετή εμπειρία στη διαδικτυακή συγγραφή. οπότε θα είμαι ο καλύτερος συγγραφέας στην πλατφόρμα σας. είμαι ο..

Το Python Selenium Web Scraping σας κατέβασε το 2023; Εκκαθαρίστε την προσωρινή μνήμη και ενισχύστε τα αποτελέσματά σας!
Η απόξεση ιστού με το Python Selenium είναι ένα εξαιρετικό εργαλείο για την εξαγωγή δεδομένων από ιστοσελίδες. Ωστόσο, περιστασιακά, οι ιστοσελίδες ενδέχεται να αποτύχουν να φορτώσουν ή να..

Έννοιες JavaScript που πρέπει να γνωρίζετε για να ξεκινήσετε με το React
Αφού είδα αυτή την ερώτηση να τίθεται αμέτρητες φορές, πιστεύω ότι μπορεί να είναι χρήσιμο σε πολλούς ανθρώπους εκεί έξω να έχουν μια σαφή κατανόηση του τι χρειάζεται να είναι γνωστό στο..

Χρήση της C++ ως γλώσσας δέσμης ενεργειών, μέρος 8
Βελτίωση κλήσεων λειτουργιών API με χρήση ενσωματωμένης συναρμολόγησης Έχω πειραματιστεί με την ενσωματωμένη συναρμολόγηση στο παρελθόν με κάποια επιτυχία. Είναι περίπλοκο και εύκολο να κάνεις..