> > kalau saya pake non-blocking,
> >
> > dev = open("/dev/blah", O_RDONLY|O_NONBLOCK, arg);
> > ret = read(dev, buffer, size);
> > process(buffer);
> >
> > apakah anda bisa menjamin bahwa ret = size hanya
> > dengan sekali read()?
untuk memastikan supaya buffer penuh isinya terpaksa
dipakai:
offset = 0;
while (size) {
ret = read(dev, buffer+offset, size);
offset += ret;
size -= ret;
}
while() looping?
> >
> Bukankah ret memang enggak harus sama dengan size.
> Kalaupun ret harus
> sama size, itukan spesifikasi dari pemrogramnya,
> jadi enggak ada
> hubungan dengan non-blocking. Coba lihat skenario
> alternatif:
>
> Thread A kirim data 8 bytes tiap detik, Thread B
> yang punya periode,
> katakan, 100 ms harus membaca message dari Thread A
> sebesar 16 bytes.
> Walau secepat apapun, Thread B ini tetep aja harus
> nunggu 2 detik untuk
> dapat menerima 16 byte.
Alangkah baiknya jika Thread B bukan periodik, tapi
event thread. Sementara Thread A ngisi buffer,
dijalankan Thread C. sampai akhirnya buffer penuh.
Thread A ngasih tau ke thread B untuk jalan.
> Bukankah polling itu akan selalu menyakan status
> kondisi dengan cara
> loop? Skenario yang anda uraikan di atas kan enggak
> ada loop dari
> fungsi yang memanggilnya, tidak juga fungsi di sys
> callnya. Dengan cara
> ini tidak ada cpu-resource yang terbuang dengan
> percuma (bukan waktu).
> Dan itu kan sebenarnya yang dimaksudkan dengan
> kelemahan polling, yaitu
> menghabiskan resource cpu. Atau mungkin kita punya
> persepsi lain dengan
> istilah "poling"?
mungkin juga.....
=====
Salam,
I.B. Darmasakti
DSP Engineer
__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com
--
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3