Zdrzanie v komunikacii / threadoch / synchronizacii?

stano na trillian.eunet.sk stano na trillian.eunet.sk
Neděle Prosinec 5 22:46:44 CET 1999


Ahojte,

mam tu taky problemik. Mam program, ktory sa sklada z dvoch
threadov. V jednom z nich - komunikacnom - bezi hlavna slucka
so selectom, ktora obsluhuje nizkourovnovu komunikaciu.
V druhom bezi vlastne spracovanie - tato slucka visi
na semafore, ktory je signalizovany spodnym threadom.
Oba thready su este spojene cez socket, aby vrch
mohol oznamit spodku, ze ma nieco v buffri.

Ked pride spodku nieco pre vyssie vrstvy, strci to do
buffera a cez semafor povie hornemu threadu, ze tam nieco
prenho je. Ak ma zase vrch nieco pre spodok, posle
mu na socket bajtik, spodok sa zobudi zo selectu
a urobi co treba:

  Proces A                     Proces B

   thr 1                         thr 1
    |                             |
    |                             |
   thr 2     <-------------->    thr 2

Mam jednoduchy test, ktory robi ping-pong bud len medzi
thr 2, alebo medzi thr 1 (t.j. proces A posle data,
ktore prebublaju az k procesu B a tam sa otocia naspat). 
Spravy su kratke.

Prvy pripad funguje rychlostou cca 4000 otociek za sekundu.
Hodnota sa pri laborovani s TCP parametrami v /proc mierne
meni. Druhy dosiahne _vzdy_ prakticky presne 425 (+- 0.5)
otociek za sekundu, pricom masina je vytazena tak na 15-20%.
Laborovanie s parametrami nezmeni nic a podozrievam
skor ten semafor.

Sockety su nonblocking TCP/IP s TCP_NODELAY, takze
Nagle neprichadza do uvahy.

Kod som nepisal ja a tak kym ho zacnem nejako dokladne
skumat a prebastlovat, rad by som sa opytal, ci to niekomu
nieco nehovori.

SMP 2 x Celeron @ 507 MHz, 128 MB RAM, 2.2.13.

Zdravi
-- 
				Stano



Další informace o konferenci Linux