2009-02-28, 21:04
  #1
Medlem
Ubis avatar
Hej,

Har gjort ett program som man kan spamma mail med.(Kommer upp på FB senare )
Allt fungerar men jag vill att programmet ska skicka snabbare och att det inte ska låsa sig om man trycker på det medan man skickar.

Därför har jag kollat lite på trådar men har fått problem.
Kod:
//Massa kod

for(blablabla)
{

//Massa kod

CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)MailIt1 ,NULL,0,NULL);//Fungerar men alla mail skickas inte
//MailIt(); //Det här fungerar
//Massa kod

}

//ännu mer kod

MailIt1() är funktionen som skickar mail.
Problemmet är om jag väljer att jag ska skicka t.ex. 50 000 mail så skickas inte alla. Det kanske bara kommer 500 eller 1000.

Gör jag något fel?

Jag har testat att begränsa antalet trådar till 10 så att den väntar med att skapa nya trådar så länge 10 trådar körs.
Men det fungerar inte heller

Någon som vet hur jag kan göra?

Tack på förhand!
Ubi
Citera
2009-02-28, 23:01
  #2
Medlem
Citat:
Ursprungligen postat av Ubi
Hej,

Har gjort ett program som man kan spamma mail med.(Kommer upp på FB senare )
Allt fungerar men jag vill att programmet ska skicka snabbare och att det inte ska låsa sig om man trycker på det medan man skickar.

Därför har jag kollat lite på trådar men har fått problem.
Kod:
//Massa kod

for(blablabla)
{

//Massa kod

CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)MailIt1 ,NULL,0,NULL);//Fungerar men alla mail skickas inte
//MailIt(); //Det här fungerar
//Massa kod

}

//ännu mer kod

MailIt1() är funktionen som skickar mail.
Problemmet är om jag väljer att jag ska skicka t.ex. 50 000 mail så skickas inte alla. Det kanske bara kommer 500 eller 1000.

Gör jag något fel?

Jag har testat att begränsa antalet trådar till 10 så att den väntar med att skapa nya trådar så länge 10 trådar körs.
Men det fungerar inte heller

Någon som vet hur jag kan göra?

Tack på förhand!
Ubi

Att skjuta iväg 50k trådar känns ganska dumt, vore det inte bättre att skriva om MailIt-function så att den tar ett argument som är antalet mail den ska skicka? En tråd som gör hela arbetet eftersom du knappast vinner något på att ha 100 trådar som gör samma sak?
Citera
2009-03-01, 01:22
  #3
Medlem
Ubis avatar
hmm... vafan, jag har inte ens tänkt på de

Jag gör så, eller jag tror jag fixar det på ett liknande sett, för visa delar av koderna i for loopen måste ligga kvar.

En fråga till,
Hur kunde jag få iväg 500mail på typ 10sekunder? innan jag började med trådar skulle det tagit minst 40...

Tack!
Citera
2009-03-01, 03:16
  #4
Medlem
Citat:
Ursprungligen postat av Ubi
hmm... vafan, jag har inte ens tänkt på de

Jag gör så, eller jag tror jag fixar det på ett liknande sett, för visa delar av koderna i for loopen måste ligga kvar.

En fråga till,
Hur kunde jag få iväg 500mail på typ 10sekunder? innan jag började med trådar skulle det tagit minst 40...

Tack!

Utan att ha sett koden, inte en susning. Men om du har en dual core (eller ännu fler cores) så kan de effektivt arbeta parallelt, varje core kan köra en tråd i taget (och har du HT, två).
Citera
2009-03-01, 03:36
  #5
Medlem
Tooners avatar
Citat:
Ursprungligen postat av Ubi
En fråga till,
Hur kunde jag få iväg 500mail på typ 10sekunder? innan jag började med trådar skulle det tagit minst 40...

Har du fler trådar än processorer (eller processorkärnor) kommer det inte spela någon roll, de körs sekventiellt ändå (till skillnad från parallellt).

Trådar har väl två stora användningsområden; det ena är att låta programmet utföra två olika saker samtidigt utan att låsa på den ena uppgiften (till exempel GUI och beräkning). Det andra att optimera ett program som har en väldigt krävande uppgift.

I det första fallet (och särskilt om det bara är ett GUI som "parallelliseras") spelar det i princip ingen roll om datorn faktiskt har tillräckligt många processorkärnor, operativsystemet kommer kunna fördela arbetet så att det för användaren ser ut som att programmet gör två uppgifter samtidigt.

I det andra fallet måste antalet trådar vara lika många som antalet processorkärnor för att det ska ge någon effekt. Operativsystemets fördelningen av arbetet ger ingen effekt totalt om det inte faktiskt finns kärnor som kan ta hand om det.
Citera
2009-03-01, 11:17
  #6
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Tooner
I det andra fallet måste antalet trådar vara lika många som antalet processorkärnor för att det ska ge någon effekt. Operativsystemets fördelningen av arbetet ger ingen effekt totalt om det inte faktiskt finns kärnor som kan ta hand om det.
Det stämmer bra. Nu gäller det dock smtp och en hel del väntan på nätverk och serversvar (lång tid sett till klockfrekvensen och context switching dvs), så viss pseudoparallellism bör man väl kunna uppnå?
Citera
2009-03-01, 15:46
  #7
Medlem
Tooners avatar
Citat:
Ursprungligen postat av gadzoox
Det stämmer bra. Nu gäller det dock smtp och en hel del väntan på nätverk och serversvar (lång tid sett till klockfrekvensen och context switching dvs), så viss pseudoparallellism bör man väl kunna uppnå?

Det kan nog stämma bra.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in