Skip to content

Instantly share code, notes, and snippets.

@jnschaeffer
Created March 3, 2020 23:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jnschaeffer/51a6024e56e11812d498fbbbfdf955f3 to your computer and use it in GitHub Desktop.
Save jnschaeffer/51a6024e56e11812d498fbbbfdf955f3 to your computer and use it in GitHub Desktop.
demonstration of concurrency in 8sync
(use-modules (oop goops)
(8sync)
(ice-9 atomic))
(define-actor <actress> (<actor>)
((recv actress-recv)))
(define (actress-recv actress message)
(8sleep 1)
(format #t "received message at ~a\n" (strftime "%c" (localtime (current-time)))))
(define-actor <directress> (<actor>)
((direct directress-direct))
(actress #:init-keyword #:actress
#:accessor directress-actress))
(define (directress-direct directress message count)
(define actress (directress-actress directress))
(format #t "directing\n")
(let loop ((i 0))
(cond ((eq? i count)
#t)
(else
(<- actress 'recv)
(loop (+ i 1)))))
(8sleep (+ count 1))
(format #t "directed\n"))
(let* ((hive (make-hive))
(actress (bootstrap-actor hive <actress>))
(directress (bootstrap-actor hive <directress>
#:actress actress)))
(run-hive hive (list (bootstrap-message hive directress 'direct 10))))
;; output
;; directing
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; received message at Tue 03 Mar 2020 06:11:09 PM EST
;; directed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment