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