blocking vs nonblocking socket
8 отговора
254 прегледа
blocking vs nonblocking socket
nqkoj da ima ideq koe e po dobre da se polzva blocking ili nonblocking socket.
Re: blocking vs nonblocking socket
nqkoj da ima ideq koe e po dobre da se polzva blocking ili nonblocking socket.
Зависи какво правиш... В повечето случаи е по-добре да блокираш докато не пристигне нещо за четене. Това обаче означава да имаш повече от една нишка или процес, за да не ти блокира цялата програма.
Ако имаш само един процес и непрекъснато обикаляш сокетите, да не би нещо да е пристигнало, натоварваш излишно процесора.
Писането може да става и неблокиращо, стига да не разчиташ, че щом нещо си записал, оттътък е получено.
Зависи какво правиш... В повечето случаи е по-добре да блокираш докато не пристигне нещо за четене. Това обаче означава да имаш повече от една нишка или процес, за да не ти блокира цялата програма.
Ако имаш само един процес и непрекъснато обикаляш сокетите, да не би нещо да е пристигнало, натоварваш излишно процесора.
Писането може да става и неблокиращо, стига да не разчиташ, че щом нещо си записал, оттътък е получено.
Re: blocking vs nonblocking socket
da re4em 4e situaciata e takava 4e postoqnno moze da mi se nalozi da polu4a ili da izprata nesto.
dali da imam 2 treda sas blocking socket (za recv i send) ili edin sas nonblocking.
dali da imam 2 treda sas blocking socket (za recv i send) ili edin sas nonblocking.
Re: blocking vs nonblocking socket
niama nujda da e non-blocking socket-a za da rabotish w poweche ot 1 socket ot 1 process -- select(2) i poll(2) sa za towa :)
AFAIK towa dali socket-a e blocking ili ne ne wliaie na pisaneto -- to e non-blocking dokato se napylniat buferite -- sled towa triabwa da chakash da se izprazniat :)
AFAIK towa dali socket-a e blocking ili ne ne wliaie na pisaneto -- to e non-blocking dokato se napylniat buferite -- sled towa triabwa da chakash da se izprazniat :)
Re: blocking vs nonblocking socket
zawisi kato cialo ot programata, no na unix az bih go napravil sys 1 thread, blocking sockets i select
Re: blocking vs nonblocking socket
ima nuzda ako iskas da pro4etes kvo ti prastat a v sastoto vreme se opitvas prez 10 sec da vrastat "boza golqma" primerno.
ako sa v edin tred recv se me blokira dokato ne polu4i nesto ako e blocking.
ako sa v edin tred recv se me blokira dokato ne polu4i nesto ako e blocking.
Re: blocking vs nonblocking socket
Не, не 1 или две нишки, а една, или n+1. Предполагаме, че правиш сървър, към който се закачат n клиента. В такъв случай правиш една главна нишка и n други, всяка от които спи, блокирана на отворен сокет. Когато нещо се появи на сокета, ядрото буди съответната нишка, за да си свърши работата. Можеш да създаваш нишките, когато отваряш нов сокет, или да държиш набор от създадени нишки, които да поемат новопоявилите се клиенти.
Това е за предпочитане пред една нишка, която да обикаля сокетите като болна и да пита: "Има ли нещо за мен, или да дойда по-късно?"
Ако може и да пратиш, без да са ти поискали нищо, значи не става въпрос за модел клиент/сервитьор, а за нещо от сорта на peer-to-peer, т.е. равнопоставени участници.
Във всеки случай, виж първо разликата между select и poll, а чак след това мисли за recv/send.
Това е за предпочитане пред една нишка, която да обикаля сокетите като болна и да пита: "Има ли нещо за мен, или да дойда по-късно?"
Ако може и да пратиш, без да са ти поискали нищо, значи не става въпрос за модел клиент/сервитьор, а за нещо от сорта на peer-to-peer, т.е. равнопоставени участници.
Във всеки случай, виж първо разликата между select и poll, а чак след това мисли за recv/send.
Re: blocking vs nonblocking socket
niama nujda da e non-blocking socket-a za da rabotish w poweche ot 1 socket ot 1 process -- select(2) i poll(2) sa za towa :)
Да, няма нужда, но е за предпочитане дизайнът на сървъра да е конкурентен, а не итеративен. Иначе даден клиент трябва да чака докато се обслужат всички преди него. Ако се обменят големи обеми данни, всички клиенти чакат един, за да им обърнат внимание на тяк. Представи си един ftp сървър, който обслужва само по един клиент наведнъж , а всички останали потропват нервно и си поглеждат часовника :) През това време не само процесорът на сървъра върти палци, но и линията не се използва ефективно, ако предположим, че фунията му е по-голяма от тази на клиента, какъвто обикновено е случаят.
Да, няма нужда, но е за предпочитане дизайнът на сървъра да е конкурентен, а не итеративен. Иначе даден клиент трябва да чака докато се обслужат всички преди него. Ако се обменят големи обеми данни, всички клиенти чакат един, за да им обърнат внимание на тяк. Представи си един ftp сървър, който обслужва само по един клиент наведнъж , а всички останали потропват нервно и си поглеждат часовника :) През това време не само процесорът на сървъра върти палци, но и линията не се използва ефективно, ако предположим, че фунията му е по-голяма от тази на клиента, какъвто обикновено е случаят.
Re: blocking vs nonblocking socket
brato,
zemi napravi design niakakyv kakvo se iska ot servera kakvo ot clienta,
to shte ti izko4i kakvo triabva da izpolzvash.
no e lesho pyrvo da pro4etesh hubavo kakvo to4no predlagat berkley sockets i winsock-a
multithread tcp server ili single thread udp
glavno tova sa konfiguraciite kojto triabva da programirash
zemi napravi design niakakyv kakvo se iska ot servera kakvo ot clienta,
to shte ti izko4i kakvo triabva da izpolzvash.
no e lesho pyrvo da pro4etesh hubavo kakvo to4no predlagat berkley sockets i winsock-a
multithread tcp server ili single thread udp
glavno tova sa konfiguraciite kojto triabva da programirash