Visiškai nudurnėjau. Atėjau šiandien į darbą pats pirmas ir suvokiau, kad neturiu ką dirbti, nes prieš tai daryta užduotis jau iš… (pavadinkim tai “išsunkta”) per visus galus. Liaudis pradėjo rinktis tik po dviejų valandų, tai visą tą laiką nieko neveikiau. Iš neturėjimo ką veikti pradėjau hipnotizuotis. Prisipastinau į teksto redaktorių daaaug daaaug tokių va linijų (galingesnė versija čia):
\ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \
…sėdžiu ir scrollinu aukštyn žemyn. Atrodo, kad tos linijos slenka :-) Taip dariau gal apie 10 minučių, kol kažkas neužkalbino per ICQ. Baisu!

Jau kurį laiką po žiauraus įvykio gyvenau vienas. Tačiau nuo vakar viskas pasikeitė. Pas mane į namus užsuko mano saulutė, nešina dviem padarais. Tai du fišai: auksinė žuvytė ir tamsiai tamsiai mėlynas gaidukas. Kadangi pirmasis mano augintinis gyveno vienas, tai jam buvo liūdna. Dėl to šį kartą gyvens dviese :-) Pradžioj į akvariumą įkėlėm auksinę, nes gaidukai kartais būna labai pikčiurnos ir nepriema įsibrovelių - pradeda
juos kapoti. Tad nusprendėm, kad taip bus geriau. Auksinė greit apsiprato najuose namuose. Tada įkėlėm gaiduką. Bijojom, kad šis neužpyktų ant naujos kaimynės. O bet tačiau tas nabagas buvo labai susinervinęs / išsigandęs ir nutūpęs ant dugno beveik nejudėjo. O netyčiom prisilietęs prie augalo ar ko kito - išsigandęs sprukdavo tolyn. Tuo tarpu auksinė visai puikiai jautėsi ir ieškojo maisto. Praėjus kiek laiko, gaidukas atkuto ir atsargiai plaukiojo pakraščiais, kiek prisibijodamas kaimynės, o auksinė toliau valdė situaciją. Na o dabar atrodo, jog abu priprato vienas prie kito ir susidraugavo :-) Tiesa, auksinė plaukioja ratais, kažką kramto, o gaidukas ją sekioja ir stebi, bet jau nebebijo ir į akvariumo vidurį atplaukt. Tai va, nuo šiol gyvensim tryse :-)
P.S. nuotraukos ne mano, o “nuskolintos”, bet fišai beveik tokie patys.
Pastebėjau tokį dalyką, kad vaikčšiodamas su savo mp3 grotuvu ir klausydamas kokio neurofunk‘o arba techstep‘o (dramenbeis), vaikštau greičiau, nei klausydamas kokio metalo ar rokelio. Kartais net taip įsibėgėju, kad vos ne bėgu :-) Įdomu kaip kiti stiliai įtakotų mano elgesį.
Nelaužom tradicijų ir šiemet vėl lėkte lekiam į Roko Naktis. Nors visas organizavimas strigo (vienu metu važiuojančių buvo 9-11, o tuo tarpu automobilių tik viens :-), tačiau kaip ir būna visada - viskas susitvarkė paskutinėm dienom. Tiesa, vienas ekipažas iš Kauno pajudės tik ~19 valandą, bet mes jam jau būsim paruošę vietas. Kaip ir pernai, šiemet vėl žadami lietūs, tačiau aš su tuo jau susitaikiau ir nuotaikos man niekas nebesugadins :-) Kaip ir kiekvienais metais, pasakysiu, jog ten vien dėl BIX’ų yra verta važiuoti! Beje, šiemet jie koncertuos šį vakarą - 22:00. Na, o kas nevažiuojat, vėlgi - patys kalti :-P
Gero savaitgalio!
Gaminu tokį serverį. Viskas sukasi ant Linux, dirbu su C++ ir POSIX gijomis. Serveris gauna užklausas iš kliento, jas atitinkamai įvykdo ir grąžina (čia reik nosinės? ne?) rezultatus klientui. Viskas turi vykti maksimaliu greičiu. Užklausos gali eiti iš 100 klientų vienu metu, tad siekiant didžiausios spartos be gijų (threadų, jei kam nors taip labiau patinka) neapsieisim. Dabar visas serverio darbas vyksta maždaug taip: gaunama užklausa iš kliento, listenerio gija nuskaito iš socketo atėjusią užduotį ir įrašo į FIFO eilę. Tuo pat metu sukasi n gijų, kurios yra atsakingos už darbų atlikimus. Šių gijų kodas atrodo taip:
void * worker(void * parm)
{
Step step;
bool gotData = false;
while (serverOn)
{
pthread_mutex_lock(&mutex);
if (!eile.empty())
{
step = eile.pop();
gotData = true;
}
pthread_mutex_unlock(&mutex);
if (gotData)
{
std::string result = readData(*step.sock, step.number);
setResult(*(step.sock), result);
delete step.sock;
gotData = false;
}
sleep(1); //Atkreipkit dėmesį čia.
}
}
Kaip matot, gija dirba nuolat, kol yra įjungtas serveris. Užrakinamas mutexas, jei yra darbų, nusiskaitomas darbas, mutexas atrakinamas ir vykdomi reikalingi veiksmai. Viskas paprasta ir aišku, tik man ramybės neduoda tas sleep(1);. Jį įdėjau tam, kad jei kodas būna be jo, labai ėdami CPU resursai, nes ciklas nuolat sukasi nieko naudingo neveikdamas. O su sleep(1) yra įvedamas kažkoks taktas. Žinau, kad tai nėra geriausias pasirinkimas, nes kažkurį laiko momentą gijos nieko neveiks, nors ir bus darbų. Veltui švaistomas laikas. Kadangi su tokiu darbu susidūriau pirmą kartą, tai tiksliai ir nežinau kaip viskas yra daroma, kad sprendimas būtų optimaliausias. Gal kas turit idėjų kaip sinchronizavimą padaryt veiksmingesniu?