Қате идентификаторларын жасайтын параллель.for () циклі

Мен .net қосымшасын әзірледім. .Net framework 4.0, мұнда көп айналым үшін parallel.for() циклын қолдандым. Мен келесі конфигурацияны қолдандым:

  1. Windows 7
  2. IIS 7.0
  3. Framework v4.0.30319

Мен ParallelOptions() сыныбын қолдандым, және осы сыныптың «MaxDegreeOfParallelism» сипаты 5-ке орнатылған. Журнал файлында «Thread.CurrentThread.ManagedThreadId» журналын тіркеген кезде 5 ағынның құрылғанын тексеріп отырдым. Мен осы қосымшаны екі түрлі ортада сынап көрдім. Бағдарлама әзірленіп жатқан ортада іске қосылғанда ол 5 жұмыс идентификаторын жасайды. Бірақ ол басқа ортада жұмыс істеп жатқанда, ол 6 немесе 7 тақырып идентификаторларын жасайды. Қолданба тек бірінші ортада құрастырылады. 2-ші ортада тестілеу үшін қолданбаның жарияланған нұсқасын қолдандым. Неліктен бұл жағдайдың қалай шешілуін және оны қалай шешу керектігін хабарлау арқылы маған біреу көмектесе алады ма?

4

2 жауаптар

Parallel.For uses thread pool threads. The MaxDegreeOfParallelism controls the maximum concurrent number of threads being used, not 5 particular threads - the thread pool is at liberty to process work on any of its threads, and Parallel.For makes sure only 5 are running at the same time.

4
қосылды

Parallel.For() пайдаланатын динамикалық бөлгішті Parallel.For() деп аталады, сондықтан массивтен өтіп, бөлімді бөлуге болады және әр бөлім бөлек тапсырма/Тақырыбы:

  1. MSDN: How to: Implement Dynamic Partitions

    Each time a partition calls MoveNext on the enumerator, the enumerator provides the partition with one list element. In the case of PLINQ and ForEach, the partition is a Task instance. Because requests are happening concurrently on multiple threads, access to the current index is synchronized.

    (I believe the same is true for Parallel.For())

  2. MSDN: Custom Partitioners

    PLINQ supports a fixed number of partitions (although data may be dynamically reassigned to those partitions during run time for load balancing.). For and ForEach support only dynamic partitioning, which means that the number of partitions changes at run time. For more information, see Custom Partitioners for PLINQ and TPL.

2
қосылды