Last active
September 24, 2023 16:39
-
-
Save maxweber/66faec4a2c10396cb1e5e917c89dd593 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(comment | |
;; Starting the REPL with `clojure -J-Djdk.tracePinnedThreads=full -J--enable-preview ...` | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(doall | |
;; LazySeq: | |
(map | |
(fn [n] | |
(Thread/sleep 1) | |
n) | |
(range 1))))) | |
;; Thread[#30579,ForkJoinPool-1-worker-30,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval115091$fn__115092$fn__115093.invoke(NO_SOURCE_FILE:62) | |
;; clojure.core$map$fn__5935.invoke(core.clj:2770) | |
;; clojure.lang.LazySeq.sval(LazySeq.java:42) <== monitors:1 | |
;; clojure.lang.LazySeq.seq(LazySeq.java:51) <== monitors:1 | |
;; clojure.lang.RT.seq(RT.java:535) | |
;; clojure.core$seq_ | |
(.start (Thread/ofVirtual) | |
(fn [] | |
@(delay (Thread/sleep 1)))) | |
;; Thread[#30592,ForkJoinPool-1-worker-31,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval115420$fn__115421$fn__115422.invoke(NO_SOURCE_FILE:85) | |
;; clojure.lang.Delay.deref(Delay.java:42) <== monitors:1 | |
;; clojure.core$deref.invokeStatic(core.clj:2337) | |
;; clojure.core$deref.invoke(core.clj:2323) | |
;; user$eval115420$fn__115421.invoke(NO_SOURCE_FILE:84) | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(first | |
(enumeration-seq | |
(reify java.util.Enumeration | |
(hasMoreElements [this] true) | |
(nextElement [this] | |
(Thread/sleep 1) | |
true)))))) | |
;; Thread[#30603,ForkJoinPool-1-worker-33,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval116290$fn$reify__116292.nextElement(NO_SOURCE_FILE:111) | |
;; clojure.lang.EnumerationSeq.first(EnumerationSeq.java:52) <== monitors:1 | |
;; clojure.lang.RT.first(RT.java:692) | |
;; clojure.core$first__5449.invokeStatic(core.clj:55) | |
;; clojure.core$first__5449.invoke(core.clj:55) | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(alter-meta! (atom nil) | |
(fn [meta] | |
(Thread/sleep 1) | |
meta)))) | |
;; Thread[#30611,ForkJoinPool-1-worker-34,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval116601$fn__116602$fn__116603.invoke(NO_SOURCE_FILE:135) | |
;; clojure.lang.AFn.applyToHelper(AFn.java:154) | |
;; clojure.lang.AFn.applyTo(AFn.java:144) | |
;; clojure.lang.AReference.alterMeta(AReference.java:31) <== monitors:1 | |
;; clojure.core$alter_meta_BANG_.invokeStatic(core.clj:2431) | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(let [a (agent {} | |
:validator | |
(fn [state] | |
(Thread/sleep 1) | |
true))] | |
(send a inc) | |
(Thread/sleep 1) ;; (await ...) blocks forever here | |
(restart-agent a | |
{})) | |
)) | |
;; Thread[#31859,ForkJoinPool-1-worker-50,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval202942$fn__202943$fn__202944.invoke(NO_SOURCE_FILE:159) | |
;; clojure.lang.ARef.validate(ARef.java:32) | |
;; clojure.lang.ARef.validate(ARef.java:46) | |
;; clojure.lang.Agent.restart(Agent.java:212) <== monitors:1 | |
;; clojure.core$restart_agent.invokeStatic(core.clj:2209) | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(def v | |
1) | |
(alter-var-root #'v | |
(fn [x] | |
(Thread/sleep 1) | |
x)) | |
)) | |
;; Thread[#31967,ForkJoinPool-1-worker-53,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval207626$fn__207627$fn__207628.invoke(NO_SOURCE_FILE:189) | |
;; clojure.lang.AFn.applyToHelper(AFn.java:154) | |
;; clojure.lang.AFn.applyTo(AFn.java:144) | |
;; clojure.lang.Var.alterRoot(Var.java:308) <== monitors:1 | |
;; clojure.core$alter_var_root.invokeStatic(core.clj:5535) | |
(.start (Thread/ofVirtual) | |
(fn [] | |
(first | |
(clojure.lang.IteratorSeq/create | |
(reify java.util.Iterator | |
(forEachRemaining [this action]) | |
(hasNext [this] true) | |
(next [this] | |
(Thread/sleep 1) | |
1) | |
(remove [this])))) | |
)) | |
;; Thread[#32758,ForkJoinPool-1-worker-55,5,CarrierThreads] | |
;; java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:183) | |
;; java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:398) | |
;; java.base/jdk.internal.vm.Continuation.yield0(Continuation.java:390) | |
;; java.base/jdk.internal.vm.Continuation.yield(Continuation.java:357) | |
;; java.base/java.lang.VirtualThread.yieldContinuation(VirtualThread.java:428) | |
;; java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:599) | |
;; java.base/java.lang.VirtualThread.doSleepNanos(VirtualThread.java:777) | |
;; java.base/java.lang.VirtualThread.sleepNanos(VirtualThread.java:750) | |
;; java.base/java.lang.Thread.sleep(Thread.java:470) | |
;; user$eval270562$fn$reify__270564.next(NO_SOURCE_FILE:217) | |
;; clojure.lang.IteratorSeq.first(IteratorSeq.java:50) <== monitors:1 | |
;; clojure.lang.RT.first(RT.java:692) | |
;; clojure.core$first__5449.invokeStatic(core.clj:55) | |
;; clojure.core$first__5449.invoke(core.clj:55) | |
;; user$eval270562$fn__2 | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment