[C win32/unix] Voorbeelden van portable threaded applicaties

Pagina: 1
Acties:

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 20:43

leuk_he

1. Controleer de kabel!

Topicstarter
Het probleem is een applicatie die nu gebruik maakt van fork() en ipc om netwerkverbindingen te maken heel slecht performt onder cygwin (unix emulatie op win32) omdat de fork van cygwin blijkbaar nogal veel overhead heeft.

De oplossing hiervoor is het tcp/ip (socket) + fork gedeelte om the schrijven naar een win32 native applicatie. (m.b.v. #IFDEF WIN32) die windows sockets gebruikt en threads in plaats van processen("CreateProces").

Het mooiste is natuurlijk om het geheel portable te maken en dus de unix port ook (automatisch) naar een threading model om te zetten. Affijn, hoe het een en ander in theorie werkt heb ik inmiddels wel gelezen.

Ik zoek nu eigenlijk voorbeelden om snel aan de gang te kunnen. Dus applicaties die zowel onder win32 (native) als onder unix/linux/posix werken waaruit veel te plakken en knippen is. /edit: lees leren

zoals:

jnetlib4 van nullsoft (is echter C++, dan moet ik het ++ gedeelte er weer uitschrijven, ik wil C hebben)
[rml][ C++]Blokkerende socket[/rml] (nuttig, daar heb ik al heel wat links uit doorgespit.)
stone ( http://www.gcd.org/sengoku/stone/Welcome.ja.html ) simpele tcpip applicatie die echter in de praktijk slecht performt onder unix. dit soort applicaties zoek ik, niet te veel regels source.
cygwin (is echter te groot, en kan teveel, daardoor kost het te veel performance,
en te complexe source om te lezen)

Wie weet nog (een paar) van dit soort applicaties geschreven in C ?

[ Voor 2% gewijzigd door leuk_he op 24-12-2003 16:44 . Reden: spelfaut ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

omdat de fork van cygwin blikbaar nogal veel overhead heeft
vrij logisch, omdat windows fork () niet kent.

Je kunt eens kijken naar de posix thread library, die werken onder zowel windows als linux. En het is gewoon C code.

Aan plak en knipwerk doen we niet in P&W, dus als je topic alleen daarover gaat dan krijgt het een slot :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 20:43

leuk_he

1. Controleer de kabel!

Topicstarter
.oisyn schreef op 24 december 2003 @ 16:13:
Je kunt eens kijken naar de posix thread library, die werken onder zowel windows als linux. En het is gewoon C code.
De essentie snap ik van die library. wellicht ga ik die ook gebruiken. Windows:
Je bedoelt deze: http://sources.redhat.com/pthreads-win32/announcement.html
Maar het idee is zo weinig mogelijk library te gebruiken, het gaat tenslotte om een optimalisatie.

Of bedoel je dat windows net als posix threads kent (createThread )

Maar ik zoek meer voorbeelden. eingenlijk zok ik een tabel
Zo doe je dit in windows, en zo doe je dit in unix.
nu is b.v. gekozen voor fork(). Dit performt echter niet onder windows. Daarom zoek ik naar (sources van)echte applicaties waar al goede beslissingen wat dat betreft genomen zijn.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

leuk_he schreef op 24 december 2003 @ 16:41:

De essentie snap ik van die library. wellicht ga ik die ook gebruiken. Windows:
Je bedoelt deze: http://sources.redhat.com/pthreads-win32/announcement.html
Maar het idee is zo weinig mogelijk library te gebruiken, het gaat tenslotte om een optimalisatie.
wat is er mis met libraries gebruiken? De posix threads library is gewoon een standaard manier om met threads te werken, wat zowel werkt onder windows als onder linux/unix. Je hebt dus portable code. Intern mappen de pthread calls gewoon naar de relevante windows calls, maar het wordt er niet langzamer door oid

(Ok, je mist misschien wel windows' uitgebreide waitable object systeem)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Weet je zeker dat het aan fork ligt? En moet je echt zoveel forken? Denk bijvoorbeeld aan hergebruik van processen.

De pthreads bibliotheek in verhouding met de fork() in cygwin nauwelijks overhead geven. Het creëren van een thread zit gewoon ingebakken in windows, het dupliceren van een proces niet.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Windows (NT) claimt posix-complient te zijn. Dat houdt dus in dat je op source-level apps kunt maken voor verschillende posix-platformen, incluis windows. Nu is de posix ondersteuning van windows zwaar deprimerend, zo niet slecht (daarom is cygwin er ook). pthreads werkt echter goed.
Windowsprocessen zijn een stuk zwaarder dan unix-processen. Forken is dus erg zwaar, zeker omdat Cygwin geen Copy-on-write kent voor forken.

Localhost, sweet localhost


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 20:43

leuk_he

1. Controleer de kabel!

Topicstarter
Infinitive schreef op 24 december 2003 @ 17:17:
Weet je zeker dat het aan fork ligt? En moet je echt zoveel forken? Denk bijvoorbeeld aan hergebruik van processen.
Onder unix (openbsd/linux) perrformt het goed. Nu was het idee om dit simpel naar windows te porten met cygwin. vandaar de foute beslissing om fork te gebruiken. Daar zou nog wel wat te optimliseren zijn, maar het is onder windows blijkbaar gewoon een foute beslissing.
De pthreads bibliotheek in verhouding met de fork() in cygwin nauwelijks overhead geven. Het creëren van een thread zit gewoon ingebakken in windows, het dupliceren van een proces niet.
Yep, nu zoek ik nog wat voorbeelden die geschreven zijn op portability tussen windows & unix zodat ik een bewezen methode kan gebruiken om de treading & socket (tcp/ip spul) van over te nemen.

ik heb in mijn start post al wat van dat soort programma's genoemd. Ik zoek meer, (denk aan een heel simple web server of een elemntaire smtp deamon), meer geschreven op leesbaarheid van de source dan op zoveel mogelijk features.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.

Pagina: 1