c ++ - Antal samtidige tråde i CreateIoCompletionPort

Indlæg af Hanne Mølgaard Plasc

Problem



På MSDN side for CreateIoCompletionPort er der en meget kort beskrivelse for den sidste parameter af denne funktion: [5]



   NumberOfConcurrentThreads [[in]]

  
  Det maksimale antal tråde, som operativsystemet kan tillade
  Samtidig behandler I/O-færdiggørelsespakker til I/O-færdiggørelsen
  Havn...



Hvad betyder det egentlig? Jeg er forvirret med ordet 'samtidigt' - det lyder som om forskellige tråde behandler den samme I/O-pakke? Og hvad sker der, hvis jeg kalder GetQueuedCompletionStatus fra flere tråde end tilladt?

Bedste reference


Se http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx[6]



  Når det samlede antal løbbare tråde, der er forbundet med
  færdiggørelsesporten når den samtidige værdi, systemet blokerer
  udførelse af eventuelle efterfølgende tråde forbundet med denne færdiggørelse
  port, indtil antallet af løbbare tråde falder under sammenfaldet
  værdi.



Hvor 'samtidighed værdi' er NumberOfConcurrentThreads. (Og der er mange flere gode ting.)


Medmindre du gør noget lidt usædvanligt, synes 0 at være en god værdi at passere, hvor den samtidige værdi er antallet af kerner. Derefter kan du få hver kerne, der trækker færdiggørelsesresultater ud af køen uden at skulle blokere eller kontekstskifte, forudsat der er nok arbejde til rådighed.


Eventuelle ekstra tråde, der foretager opkald til GetQueuedCompletionStatus, vil blokere, selvom der er tilgængelige udførelser.