No registered users in community Materiały
in last 10 minutes
in last 10 minutes
ALR - rozszerzenia symulatora
Jak dodać "wagi krawędzi" do symulatora?
# (wykonać to w konsoli po utworzeniu fiberów!)
proc ustaw_wagi {} {
global sasiedzi liczbaWierz waga
iterate i $liczbaWierz {
set ww {}
foreach s $sasiedzi($i) {
if {[info exists waga($i,$s)]} {
set w $waga($i,$s)
} elseif {[info exists waga($s,$i)]} {
set w $waga($s,$i)
} else {
set w 0
}
lappend ww $w
}
fiber_eval $i "set wagi {$ww}"
}
}
set waga(1,3) 10; # waga kraw {1,3}
set waga(1,4) 11
set waga(6,4) 12
ustaw_wagi
# + tworzy w kazdym fiberze zm. globalną "wagi"
# jest to lista z wagami odp. połączeniom z sąsiadami
# + wagi nie występujące w tabliy waga, w konsoli
# mają wagę = 0
fiber_iterate {_puts "($id) $wagi"}
# test
Jak dostarczyć wszystkie niedostarczone komunikaty w modelu asynchronicznym?
przydatne przy budowaniu egzekucji asynch...
# (wykonać to w konsoli po utworzeniu fiberów!)
proc dostarczWszystkieKom {} {
fiber_iterate {
iterate __i $stopien {
eval lappend kom${__i} [set kom${__i}_pisz]
set kom${__i}_pisz {}
}
unset __i
}
}
dostarczWszystkieKom; pokazKom
# test (w symulatorze asynch!)
Jak poradzić sobie z długim czasem ładowania pakietów we wszystkich fiberach?
np. pakietu struct::set z tcllib, do operacji na zbiorach...
# (wykonać to w konsoli po utworzeniu 20 fiberów!)
fiber_iterate {lappend auto_path ./tcllib}; # jeśli to potrzebne
time {fiber_iterate {package re struct::set}}
#% 15160901 microseconds per iteration
# + strasznie długo...
# tworzymy aliasy w fiberach do komendy struct::set w konsoli !!
lappend auto_path ./tcllib; # jeśli to potrzebne
package re struct::set
#% 2.2.3
time {iterate i $liczbaWierz {fiber$i alias struct::set struct::set}}
#% 639 microseconds per iteration
# + znacznie szybciej...
fiber_eval 0 {struct::set difference {1 2 3} {3 4 5}}
#% 1 2
# + dziala...
# 22.10.2017, Uwaga: wolno używać tylko met. funkcyjnych (tych BEZ arg. svar) !!!