Reworking scheduler

darcs
slava 2006-06-15 02:58:17 +00:00
parent 23bc02dab6
commit b4bff0a33d
6 changed files with 66 additions and 59 deletions

View File

@ -1,52 +1,26 @@
- unix i/o: problems with passing f to syscalls
- if a primitive throws an error, :c doesn't show the call frame there - if a primitive throws an error, :c doesn't show the call frame there
- "benchmark/help": without a yield UI runs out of memory - "benchmark/help": without a yield UI runs out of memory
- x11 title bars are funny
+ httpd: + httpd:
- outliners don't work - outliners don't work
- browser responder doesn't work - browser responder doesn't work
- fix remaining HTML stream issues - fix remaining HTML stream issues
- update for file style prop becoming presented <file> - update for file style prop becoming presented <file>
- fix this:
[ 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 11 11 11 113 ] .
[ 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 11 11 11 113
]
- code walker & exceptions -- test and debug problems
- another i/o bug: on factorcode eventually all i/o times out
- bug in pound?
- factorcode httpd started using 99% CPU, but still received connections;
closing read-fds solved it
- if the listener is running a command when the image is saved, it
restores to an unresponsive gadget
- fix top level window positioning
- services do not launch if factor not running
- rollover is not updated on window focus changes
- amd64 crash
- x86 bootstrap intermittent crash
- get factor running on mac intel
- constant branch folding
- cocoa: starting the UI with +foo switches opens them as files
+ refactor style stack code so that nested styles are handled at a lower-level
- with-style & with-stream-style
- in HTML, we can nest div tags, etc
- prettyprinter's highlighting of non-leaves looks bad
- better line spacing in ui and html - related issue
+ fix compiled gc check
- there was a performance hit, investigate
- float boxing and overflow checks need a gc check too
+ io: + io:
- unix i/o: problems with passing f to syscalls
- factorcode httpd started using 99% CPU, but still received connections;
closing read-fds solved it
- gdb triggers 'mutliple i/o ops on port' error - gdb triggers 'mutliple i/o ops on port' error
- better i/o scheduler - eg, yield in a loop starves i/o - better i/o scheduler - eg, yield in a loop starves i/o
- "localhost" 50 <client> won't fail - "localhost" 50 <client> won't fail
+ help: + help:
- refactor style stack code so that nested styles are handled at a lower-level
- with-style & with-stream-style
- in HTML, we can nest div tags, etc
- automatically update help graph when adding/removing articles/words - automatically update help graph when adding/removing articles/words
- help search: - help search:
- edit distance algorithm - edit distance algorithm
@ -55,6 +29,15 @@
+ ui: + ui:
- x11 title bars are funny
- cocoa: starting the UI with +foo switches opens them as files
- if the listener is running a command when the image is saved, it
restores to an unresponsive gadget
- fix top level window positioning
- services do not launch if factor not running
- prettyprinter's highlighting of non-leaves doesn't really work
- better line spacing in ui and html - related issue
- rollover is not updated on window focus changes
- fix listener scroll to - fix listener scroll to
- { } H{ } [ ] tabular-output -- excess newline - { } H{ } [ ] tabular-output -- excess newline
- multiple listener-run-files is broken - multiple listener-run-files is broken
@ -72,8 +55,6 @@
- only do clipping for certain gadgets - only do clipping for certain gadgets
- use glRect - use glRect
- use complex numbers instead of arrays for co-ordinates - use complex numbers instead of arrays for co-ordinates
- decrease minimum growable size from 50 to 4 or something, to reduce
memory consumption of a gadget with one child
- use vertex arrays - use vertex arrays
- use display lists - use display lists
- reimplement tab completion - reimplement tab completion
@ -85,6 +66,12 @@
+ compiler/ffi: + compiler/ffi:
- fix compiled gc check
- there was a performance hit, investigate
- float boxing and overflow checks need a gc check too
- amd64 crash
- get factor running on mac intel
- constant branch folding
- type inference at branch merge points - type inference at branch merge points
- free up r11, r12 as a vreg on ppc - free up r11, r12 as a vreg on ppc
- float= on powerpc doesn't consider nans equal - float= on powerpc doesn't consider nans equal
@ -104,6 +91,13 @@
+ misc: + misc:
- fix this:
[ 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 11 11 11 113 ] .
[ 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 11 11 11 113
]
- code walker & exceptions -- test and debug problems
- slice: if sequence or seq start is changed, abstraction violation - slice: if sequence or seq start is changed, abstraction violation
- make 3.4 bits>double an error - make 3.4 bits>double an error
- break: perhaps use current stdio to run break listener - break: perhaps use current stdio to run break listener

View File

@ -157,7 +157,7 @@ ARTICLE: "threads" "Multitasking"
{ $subsection run-queue } { $subsection run-queue }
{ $subsection sleep-queue } { $subsection sleep-queue }
{ $subsection schedule-thread } { $subsection schedule-thread }
{ $subsection next-thread } ; { $subsection idle-thread } ;
ARTICLE: "continuations-internals" "Continuation implementation details" ARTICLE: "continuations-internals" "Continuation implementation details"
"A continuation is simply a tuple holding the contents of the four stacks:" "A continuation is simply a tuple holding the contents of the four stacks:"

View File

@ -39,9 +39,6 @@ parser sequences sequences-internals words ;
"Unless you're working on the compiler, ignore the errors above." print "Unless you're working on the compiler, ignore the errors above." print
"Not every word compiles, by design." print "Not every word compiles, by design." print
terpri flush terpri flush
"Building online help search index..." print flush
index-help
"Initializing native I/O..." print flush "Initializing native I/O..." print flush
"native-io" get [ init-io ] when "native-io" get [ init-io ] when
@ -60,6 +57,9 @@ parser sequences sequences-internals words ;
compile-all compile-all
] when ] when
] when ] when
"Building online help search index..." print flush
index-help
[ [
boot boot

View File

@ -19,16 +19,23 @@ namespaces queues sequences vectors ;
: sleep-time ( sorted-queue -- ms ) : sleep-time ( sorted-queue -- ms )
dup empty? [ drop 1000 ] [ peek first millis [-] ] if ; dup empty? [ drop 1000 ] [ peek first millis [-] ] if ;
DEFER: next-thread ! DEFER: next-thread
!
: do-sleep ( -- continuation ) ! : do-sleep ( -- continuation )
sleep-queue* dup sleep-time dup zero? ! sleep-queue* dup sleep-time dup zero?
[ drop pop second ] [ nip io-multiplex next-thread ] if ; ! [ drop pop second ] [ nip io-multiplex next-thread ] if ;
!
: next-thread ( -- continuation ) ! : next-thread ( -- continuation )
run-queue dup queue-empty? [ drop do-sleep ] [ deque ] if ; ! run-queue dup queue-empty? [ drop do-sleep ] [ deque ] if ;
!
: stop ( -- ) next-thread continue ; ! : stop ( -- ) next-thread continue ;
!
! : init-threads ( -- )
! global [
! <queue> \ run-queue set
! V{ } clone \ sleep-queue set
! ] bind ;
: stop ( -- ) run-queue deque continue ;
: yield ( -- ) [ schedule-thread stop ] callcc0 ; : yield ( -- ) [ schedule-thread stop ] callcc0 ;
@ -44,8 +51,18 @@ DEFER: next-thread
try stop try stop
] callcc0 drop ; ] callcc0 drop ;
: (idle-thread) ( fast? -- )
#! If fast, then we don't sleep, just select()
sleep-queue* dup sleep-time dup zero?
[ drop pop second schedule-thread ]
[ nip 0 ? io-multiplex ] if ;
: idle-thread ( -- )
#! This thread is always running.
#! If run queue is not empty, we don't sleep.
run-queue queue-empty? (idle-thread) yield idle-thread ;
: init-threads ( -- ) : init-threads ( -- )
global [ <queue> \ run-queue set-global
<queue> \ run-queue set V{ } clone \ sleep-queue set-global
V{ } clone \ sleep-queue set [ idle-thread ] in-thread ;
] bind ;

View File

@ -20,10 +20,6 @@ HELP: sleep-time "( vector -- ms )"
{ $values { "vector" "a sorted sleep queue" } { "ms" "a non-negative integer" } } { $values { "vector" "a sorted sleep queue" } { "ms" "a non-negative integer" } }
{ $description "Outputs the time until the next sleeping thread is scheduled to wake up, or -1 if there are no sleeping threads. The input must be a sorted sleep queue output by " { $link sleep-queue* } "." } ; { $description "Outputs the time until the next sleeping thread is scheduled to wake up, or -1 if there are no sleeping threads. The input must be a sorted sleep queue output by " { $link sleep-queue* } "." } ;
HELP: next-thread "( -- continuation )"
{ $values { "continuation" "a continuation" } }
{ $description "Outputs the next runnable thread. If there are no runnable threads, waits for a sleeping thread to wake up." } ;
HELP: stop "( -- )" HELP: stop "( -- )"
{ $description "Stops the current thread." } ; { $description "Stops the current thread." } ;

View File

@ -116,7 +116,7 @@ GENERIC: task-container ( task -- vector )
: handle-fd ( task -- ) : handle-fd ( task -- )
dup io-task-port touch-port dup do-io-task dup io-task-port touch-port dup do-io-task
[ pop-callback continue ] [ drop ] if ; [ pop-callback schedule-thread ] [ drop ] if ;
: timeout? ( port -- ? ) : timeout? ( port -- ? )
port-cutoff dup zero? not swap millis < and ; port-cutoff dup zero? not swap millis < and ;
@ -125,7 +125,7 @@ GENERIC: task-container ( task -- vector )
[ [
nip dup io-task-port timeout? [ nip dup io-task-port timeout? [
dup io-task-port "Timeout" swap report-error dup io-task-port "Timeout" swap report-error
nip pop-callback continue nip pop-callback schedule-thread
] [ ] [
tuck io-task-fd swap bit-nth tuck io-task-fd swap bit-nth
[ handle-fd ] [ drop ] if [ handle-fd ] [ drop ] if