mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Merge branch 'master' of github.com:janet-lang/janet
This commit is contained in:
		| @@ -1,68 +0,0 @@ | |||||||
| (defn worker-main |  | ||||||
|   "Sends 11 messages back to parent" |  | ||||||
|   [parent] |  | ||||||
|   (def name (thread/receive)) |  | ||||||
|   (def interval (thread/receive)) |  | ||||||
|   (for i 0 10 |  | ||||||
|     (os/sleep interval) |  | ||||||
|     (:send parent (string/format "thread %s wakeup no. %d" name i))) |  | ||||||
|   (:send parent name)) |  | ||||||
|  |  | ||||||
| (defn make-worker |  | ||||||
|   [name interval] |  | ||||||
|   (-> (thread/new worker-main) |  | ||||||
|       (:send name) |  | ||||||
|       (:send interval))) |  | ||||||
|  |  | ||||||
| (def bob (make-worker "bob" 0.02)) |  | ||||||
| (def joe (make-worker "joe" 0.03)) |  | ||||||
| (def sam (make-worker "sam" 0.05)) |  | ||||||
|  |  | ||||||
| # Receive out of order |  | ||||||
| (for i 0 33 |  | ||||||
|   (print (thread/receive))) |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Recursive Thread Tree - should pause for a bit, and then print a cool zigzag. |  | ||||||
| # |  | ||||||
|  |  | ||||||
| (def rng (math/rng (os/cryptorand 16))) |  | ||||||
|  |  | ||||||
| (defn choose [& xs] |  | ||||||
|   (in xs (:int rng (length xs)))) |  | ||||||
|  |  | ||||||
| (defn worker-tree |  | ||||||
|   [parent] |  | ||||||
|   (def name (thread/receive)) |  | ||||||
|   (def depth (thread/receive)) |  | ||||||
|   (if (< depth 5) |  | ||||||
|     (do |  | ||||||
|     (defn subtree [] |  | ||||||
|       (-> (thread/new worker-tree) |  | ||||||
|           (:send (string name "/" (choose "bob" "marley" "harry" "suki" "anna" "yu"))) |  | ||||||
|           (:send (inc depth)))) |  | ||||||
|     (let [l (subtree) |  | ||||||
|           r (subtree) |  | ||||||
|           lrep (thread/receive) |  | ||||||
|           rrep (thread/receive)] |  | ||||||
|       (:send parent [name ;lrep ;rrep]))) |  | ||||||
|     (do |  | ||||||
|       (:send parent [name])))) |  | ||||||
|  |  | ||||||
| (-> (thread/new worker-tree) (:send "adam") (:send 0)) |  | ||||||
| (def lines (thread/receive)) |  | ||||||
| (map print lines) |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Receive timeout |  | ||||||
| # |  | ||||||
|  |  | ||||||
| (def slow (make-worker "slow-loras" 0.5)) |  | ||||||
| (for i 0 50 |  | ||||||
|   (try |  | ||||||
|     (let [msg (thread/receive 0.1)] |  | ||||||
|       (print "\n" msg)) |  | ||||||
|     ([err] (prin ".") (:flush stdout)))) |  | ||||||
|  |  | ||||||
| (print "\ndone timing, timeouts ending.") |  | ||||||
| (try (while true (print (thread/receive))) ([err] (print "done"))) |  | ||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose