C threading in Linux?

7

Hat jemand ein einfaches Beispiel für das Einfädeln von c?

Ich möchte eine kleine Konsolen-App erstellen, die eine txt-Datei Zeile für Zeile liest und dann Threads verwendet, um den gesamten txt zu verarbeiten. Wie soll ich das machen? das Teilen des txt in X, wo X = N von Threads, ist das erste, was mir in den Sinn kommt, gibt es einen besseren Weg?

    
jahmax 07.07.2010, 19:42
quelle

6 Antworten

6

Suchen Sie nach POSIX-Threads, die auch als Pthreads bezeichnet werden. Tutorial hier

    
James Roth 07.07.2010, 19:46
quelle
8

Die beste Option IMHO ist die Verwendung von POSIX-Threads. Sie können weitere Einzelheiten HIER sehen.

Siehe auch den Link in James 'Antwort.

    
Incognito 07.07.2010 20:31
quelle
7

Suche nach Pthreads. Ich bin auch ein Thread-Neuling. Hier ist ein Code-Snippet von 1 bis 1000000000 (auch mein erstes funktionierendes Pthread-Programm).

%Vor%     
Zifei Tong 07.07.2010 20:11
quelle
3

Wenn Sie einen einfachen Weg dazu wünschen, ist OpenMP eine leistungsstarke Multithreading-Bibliothek, die von gcc unterstützt wird.

%Vor%

Dies führt das einfache Hinzufügen von zwei Arrays durch und speichert das Ergebnis in "a", aber auf einem Quad-Core-Rechner werden 4 Threads erzeugt, um damit umzugehen (8, falls Hyperthreading unterstützt wird).

Einfache Multicore-Programmierung unter Linux. :)

Ein Leitfaden von einem Finnen: Ссылка

    
kobrien 07.07.2010 20:51
quelle
1

Als erstes fragen Sie sich, ob Sie hier wirklich Multi-Threading durchführen müssen. Brauchen Sie einen gemeinsamen Status zwischen den Threads, z. fließen die Informationen aus allen URLs in die gleiche Datenstruktur ein? Wenn nicht, könnten Prozesse (fork) ausreichend sein. Oder Sie gehen vielleicht nicht einmal so weit und verwenden nur ereignisbasierte Programmierung (glib, libev).

Glib könnte sich auch dann lohnen, wenn Sie sich dafür entscheiden, Threads zu verwenden, da es eine ordentliche Thread-Abstraktion mit Thread-Pools gibt. Dies würde die Partitionierung Ihrer Datei sehr einfach machen, da Sie einfach X-Thread-Pools erstellen und dann die dl / parse-Pools zu einer von ihnen hinzufügen (Zeilen-Nr.% -Pool-Größe).

Wenn es nur darum geht, Downloads zu beschleunigen, hat Ihre http-Bibliothek möglicherweise bereits ähnliche Funktionen. Für curl gibt es eine Reihe von curl_multicalls mit einer interessanten Beispiel hier .

    
mhd 07.07.2010 22:56
quelle
1
  

Teilen des txt in X wobei X = N von   Threads, ist das erste, was kommt   In meinen Augen, gibt es einen besseren Weg?

Es hängt von Ihrer Anwendung ab.

  • Threads können helfen, wenn die Interpretation der Daten der Flaschenhals ist, der Leistungsgewinn wird durch die Datei-E / A-Geschwindigkeit begrenzt
  • Threads werden nicht helfen, wenn das Lesen der Datei der Flaschenhals ist, die Festplatten-E / A ist durch die Hardware begrenzt und wird nur verschlechtert, wenn mehr Threads Daten anfordern

Wenn die Interpretation der Informationen lange dauert, können Sie etwas wie das Konsumentenmuster verwenden und selbst testen, wie viele Threads es gibt du brauchst. (Versuchen Sie es mit einer niedrigen Zahl und sehen Sie, wie viele Ihnen die beste Leistung bringen). Einige Beispiele finden Sie hier und hier

Wie die anderen Antworten zeigen, können Sie pthreads verwenden, um Threading zu implementieren.

    
josefx 07.07.2010 21:12
quelle

Tags und Links