[so] egal incarcate

Octavian Purdila so@atlantis.cs.pub.ro
Wed, 03 Dec 2003 14:27:10 +0200


------------o3NZmg3w1L6b6j9DIGn5Zu
Content-Type: text/plain; format=flowed; charset=iso-8859-1
Content-Transfer-Encoding: 8bit


On Wed, 3 Dec 2003 10:29:20 +0200, Ovidiu Platon 
<ovidiupl@microsoft-lab.pub.ro> wrote:

>
> 	OP> Va primi un 'ready to rock' dupa care va astepta ca procesarea sa 
> se intample efectiv. Daca insa ar fi analizat un pic si ar fi decis ca e 
> mai bine sa porneasca un nou thread, procesarea ar fi putut decurge mai 
> rapid, exploatand la maxim si procesorul si discul;

Dupa ce thread-ul primeste datele, adica asteapta la I/O, el le va trimite 
prin socket, deci
face alta operatie de I/O. Intercalat cu aceste operatii mai executa 10-20 
de instructiuni
masina in care mai faci mici chestii administrative, ca de exemplu scoate 
cererea din coada.

Aparent avem aici o latenta de 10-20 instr care pentru un numar mare de 
cereri creste liniar, astfel
incat avem o latenta de N*(10-20) instructiuni, corect? Nope. Pentru ca, 
latenta de 10-20 instr se
compenseaza  prin faptul ca in timp ce asteptam la I/O putem executa 
celelalte 10-20 instr.
Asa ca lucrurile stau destul de bine atunci cand se foloseste un singur 
thread, pentru valori ale lui N relativ
mari. Pentru exemplificare vedeti programul atasat (si tineti cont de 
faptul ca printf face pana la urma
un apel de sistem, deci e relativ costisitor).

> daca ar fi decis ca  nu e  nevoie de inca un thread, ar fi avut loc 
> celalalt scenariu. Sigur,

Daca se folosesc mai multe thread-uri, apare o latenta la comutarea 
thread-urilor. Astfel incat nu
are sens sa folositi mai multe thread-uri decat daca sunt prezente in 
sistem mai multe procesoare. Pentru
asta exista parametri pentru server.

>
> 	OP> Mie exprimarea asta mi se pare cam radicala si eu unul as fi 
> evitat-o, macar din politete daca nu din alte motive. Daca sugestia mea 
> a fost deplasata, ma asteptam la o explicatie de genul "Uite, pentru 
> aplicatia asta e mai bine sa faci cum e in cerinta pentru ca...", nu un 
> raspuns cliseu de tipul "Ce parte din <trebuie> nu intelegi"...
> 	

Daca mailul l-ar fi scris altcineva, asa as fi procedat. La genul de 
mailuri pe care
le trimiti insa, am considerat ca are sens sa imi exprim clar parerea fata 
de atitudini
de genul "tampenia aia de MinGW", "am impresia ca aici invatam, nu gandim" 
care
sunt afirmatii gratuite ce nu au nici o sustinere.

In plus, afirmatii de genu asta nu au ce cauta pe lista, si daca este 
cazul o sa renunt la
compania celor ce in continuare, in mod repetat nu respecta regulile.

tavi

------------o3NZmg3w1L6b6j9DIGn5Zu
Content-Disposition: attachment; filename=aio.c
Content-Type: application/octet-stream; name=aio.c
Content-Transfer-Encoding: 8bit

#include <aio.h>
#include <stdio.h>

int main(int argc, char **argv)
{
	int fd=open(argv[1], O_RDONLY), i, tmp;
	char buff[64000];
	struct aiocb aio = {
		aio_fildes: fd,
		aio_offset:0,
		aio_buf:buff,
		aio_nbytes:64000,
		aio_reqprio:0,
		aio_sigevent: { 
			sigev_notify:SIGEV_NONE
		},
		aio_lio_opcode: LIO_READ,
	};
	
	
	aio_read(&aio);
	
	for(i=0; i<=1000000; i++) {
		printf("\r %d %d", i, tmp=aio_return(&aio));
		if (tmp) {
			printf("\n");
			return 0;
		}
	}
	
	return 0;
}

------------o3NZmg3w1L6b6j9DIGn5Zu--