--- "I.B. Darmasakti" <[EMAIL PROTECTED]> schrieb: > > > 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? 
> 
Nah, ini kan algoritmus dari sang pemrogram, bahwa looping dijalankan
sampai tercapai kondisi ret==size, ini adalah spesifikasi sang
pemrogram yang menggunakan methoda polling. Tapi fungsi read() sendiri
tidak melakukan polling. 

> > > 
> > 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.
> 
Enggak ada bedanya, dua2nya enggak ngabisin CPU-Resource dan Thread B
akan menghabiskan waktu yang sama untuk menunggu datangnya message dr
thread A tanpa menggunakan CPU-Resource. Contoh di atas cuma
mengilustrasikan, bahwa secepat apapun switching contectnya, interrupt
latencynya, etc, dengan sekali panggil perintah read(), belum tentu
ret=size, karena memang bergantung pada aplikasinya.

ebs

__________________________________________________________________

Gesendet von Yahoo! Mail - http://mail.yahoo.de
M�chten Sie mit einem Gru� antworten? http://grusskarten.yahoo.de

-- 
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3

Kirim email ke