-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sat, 15 Nov 2003, Andrei Pelinescu-Onciul wrote:
> Primesti cand esti scheduled urmatoarea data. Quanta curenta nu ti-o
> intrerupe, seteaza un flag ca ai primit SIG_xxx si data urmatoarea cand
> procesul tau se intoarce dintr-un syscall sau e scheduled din nou, il
> primeste.
Ok, asta imi raspunde la intrebare. Multumesc si tie si lui Teo.
Acum, de ce de fapt am intrebat de asta.
Problema mea initiala e ca intr-un main server loop (asa numesc eu acel
loop principal, intr-un server TCP/IP single threaded, in care faci
select/poll, apoi tratezi evenimentele si o iei de la capat) se apela la
inceputul loop-ului "time(&now)". Ori acel loop la un server idle se
executa de 50 de ori pe secunda (timeout-ul la select/poll e 20
milisecunde), nu mai zic de unul incarcat (cazul normal) in care se
executa mult mai des. "now" este folosit in loop pt a executa anumite
lucruri programate (timers), a face un fel de garbage collection pe
seturile de cache etc... Ori mi se pare prost gandit sa executi time() la
fiecare loop deoarece acesta din cate stiu apeleaza la randul sau
gettimeofday() (syscall) si apare un overhead nenecesar din moment ce m-ar
interesa sa citesc timpul doar la intervala de o secunda. Si atunci ma
gandeam ca o solutie aici este folosirea setitimer() cu ITIMER_REAL, care
sa imi declanseze singal handlerul ALARM care sa updateze o variabila
interna "read_time = 1" si apoi in server loop
if (read_time) { time(&now); read_time = 0; }
Acum as apela si time(&now) din ALARM sighandler daca stiu ca e safe dar
nu e neaparat necesar.
- --
Mihai RUSU Email: [EMAIL PROTECTED]
GPG : http://dizzy.roedu.net/dizzy-gpg.txt WWW: http://dizzy.roedu.net
"Linux is obsolete" -- AST
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQE/tpRuPZzOzrZY/1QRAhDlAKDn3i+kSav80iJlBSC84WSiT14vpACgqomj
3/7y3u6CiAbaUSO9Z1L4ooA=
=xAoA
-----END PGP SIGNATURE-----
---
Detalii despre listele noastre de mail: http://www.lug.ro/