IndexCell.cleanCache()

Forum for developers

IndexCell.cleanCache()

Beitragvon sixcooler » Mi Feb 23, 2011 7:16 pm

Hallo,

hat irgendwer noch im Hirn warum in der Methode cleanCache() 2 fast Identische If-Abfragen vorkommen?
Code: Alles auswählen
..
if (this.dumperSemaphore.availablePermits() > 0 &&
            (this.ram.size() >= this.maxRamEntries ||
             (this.ram.size() > 3000 && !MemoryControl.request(80L * 1024L * 1024L, false)) ||
             (this.ram.size() > 3000 && this.lastDump + dumpCycle < t))) {
            try {
                this.dumperSemaphore.acquire(); // only one may pass
                if (this.ram.size() >= this.maxRamEntries ||
                    (this.ram.size() > 3000 && !MemoryControl.request(80L * 1024L * 1024L, false)) ||
                    (this.ram.size() > 0 && this.lastDump + dumpCycle < t)) try {..

Die untere Abfrage scheint mir übeflüssig und bei mir läuft es auch ohne diese. dumperSemaphore.acquire() sollte ja nicht so dicke Änderungen hervorrufen, oder?
Bevor ich sowas wegcommite wollt ich aber noch mal nachgefragt haben.

Cu, sixcooler.
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm

Re: IndexCell.cleanCache()

Beitragvon Orbiter » Mi Feb 23, 2011 7:55 pm

das sollte so richtig sein, jedenfalls wie gedacht. Es ist so:
- die If-Abfrage ist nur valide wenn sie dort synchronisiert statt findet
- durch die Synchronisation locken massig viele Threads dort, denn diese Art der doppelten ifs gibts noch öfters in YaCy weil sie immer dort hin gekommen sind wo sie per thread dump aufgefallen sind.
. wenn man das if vor dem Lock wiederholt, dann vermeidet man in den meisten Fällen die Synchronisation

Falls jemand einen Vorschlag hat wie man das besser macht nur her damit.
Orbiter
 
Beiträge: 5798
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: IndexCell.cleanCache()

Beitragvon sixcooler » Mi Feb 23, 2011 9:23 pm

Vielen Dank für die Erläuterung.

Und ich dachte
Code: Alles auswählen
if (this.dumperSemaphore.availablePermits() > 0)
würde schon reichen, um mehrfaches 'Eintreten' zu verhindern.
Wenn es aber sogar in dumps vorkam sollte es auf jeden Fall so bleiben - hab auch keine Idee wie es besser gemacht werden könnte.
sixcooler
 
Beiträge: 494
Registriert: Do Aug 14, 2008 5:22 pm


Zurück zu YaCy Coding & Architecture

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron