From f6c4ac8bcc133e1a90c60dec7b984d1c48b96803 Mon Sep 17 00:00:00 2001 From: Sandro Leuchter Date: Tue, 7 Jan 2025 15:03:45 +0100 Subject: [PATCH] initial --- src/pp.09.01-Fiber/justfile | 19 +++++ src/pp.09.01-Fiber/pom.xml | 70 +++++++++++++++++++ src/pp.09.01-Fiber/src/main/java/pp/Main.java | 17 +++++ .../src/main/java/pp/fiber/Performance.java | 14 ++++ .../java/pp/fiber/first/FiberPerformance.java | 16 +++++ .../pp/fiber/first/ThreadPerformance.java | 15 ++++ .../pp/fiber/second/FiberPerformance.java | 30 ++++++++ .../pp/fiber/second/ThreadPerformance.java | 31 ++++++++ 8 files changed, 212 insertions(+) create mode 100644 src/pp.09.01-Fiber/justfile create mode 100644 src/pp.09.01-Fiber/pom.xml create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/Main.java create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/fiber/Performance.java create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/fiber/first/FiberPerformance.java create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/fiber/first/ThreadPerformance.java create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/fiber/second/FiberPerformance.java create mode 100644 src/pp.09.01-Fiber/src/main/java/pp/fiber/second/ThreadPerformance.java diff --git a/src/pp.09.01-Fiber/justfile b/src/pp.09.01-Fiber/justfile new file mode 100644 index 0000000..d5b5824 --- /dev/null +++ b/src/pp.09.01-Fiber/justfile @@ -0,0 +1,19 @@ +# Justfile (https://just.systems/) for starting Maven standard targets + +default: clean compile package + just exec pp.Main "" + +exec class args: compile + mvn exec:java -Dexec.args="{{args}}" -Dexec.mainClass={{class}} +# exec class args: +# java -cp target/app.jar {{class}} {{args}} +clean: + mvn clean +compile: + mvn compile +test: compile + mvn test +javadoc: + mvn javadoc:javadoc +package: + mvn package diff --git a/src/pp.09.01-Fiber/pom.xml b/src/pp.09.01-Fiber/pom.xml new file mode 100644 index 0000000..858c4bc --- /dev/null +++ b/src/pp.09.01-Fiber/pom.xml @@ -0,0 +1,70 @@ + + 4.0.0 + pp + pp.09.01-Fiber + 1.0-SNAPSHOT + jar + + + 23 + edge-SNAPSHOT + UTF-8 + + + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + org.projectlombok + lombok + ${lombok.version} + provided + + + net.jcip + jcip-annotations + 1.0 + provided + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.9.0 + + + + org.projectlombok + lombok + ${lombok.version} + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + private + en_US + + + + + diff --git a/src/pp.09.01-Fiber/src/main/java/pp/Main.java b/src/pp.09.01-Fiber/src/main/java/pp/Main.java new file mode 100644 index 0000000..fb1ac15 --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/Main.java @@ -0,0 +1,17 @@ +package pp; + +public class Main { +private final static int NUM = 100; + public static void main(String[] args) throws InterruptedException { + pp.fiber.Performance.main(); + pp.fiber.first.ThreadPerformance.main(); + pp.fiber.first.FiberPerformance.main(); + pp.fiber.second.ThreadPerformance.main(String.valueOf(NUM)); + pp.fiber.second.FiberPerformance.main(String.valueOf(NUM)); + pp.fiber.second.FiberPerformance.main(String.valueOf(NUM*10)); + pp.fiber.second.FiberPerformance.main(String.valueOf(NUM*100)); + pp.fiber.second.FiberPerformance.main(String.valueOf(NUM*1000)); + System.exit(0); + } + +} diff --git a/src/pp.09.01-Fiber/src/main/java/pp/fiber/Performance.java b/src/pp.09.01-Fiber/src/main/java/pp/fiber/Performance.java new file mode 100644 index 0000000..cb8fcf6 --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/fiber/Performance.java @@ -0,0 +1,14 @@ +package pp.fiber; + + + +public class Performance { + static long now; + + public static void main(String... args) throws InterruptedException { + now = System.nanoTime(); + now = System.nanoTime() - now; + System.out.printf("Zeitdauer zwischen zwei Instruktionen (Baseline \"Minimum\"): %3.3f ms\n", now / 1000.0); + } + +} diff --git a/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/FiberPerformance.java b/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/FiberPerformance.java new file mode 100644 index 0000000..88ab4c1 --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/FiberPerformance.java @@ -0,0 +1,16 @@ +package pp.fiber.first; + + +public class FiberPerformance { + static long now; + + public static void main(String... args) throws InterruptedException { + now = System.nanoTime(); + var t = Thread.ofVirtual() + .unstarted(() -> now = System.nanoTime() - now); + t.start(); + t.join(); + System.out.printf("Fast leerer virtueller Thread Starten bis Ende (Baseline: \"Fiber\": %3.3f ns\n", now / 1000.0); + } + +} diff --git a/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/ThreadPerformance.java b/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/ThreadPerformance.java new file mode 100644 index 0000000..1bec2a0 --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/fiber/first/ThreadPerformance.java @@ -0,0 +1,15 @@ +package pp.fiber.first; + + +public class ThreadPerformance { + static long now; + + public static void main(String... args) throws InterruptedException { + now = System.nanoTime(); + var t = new Thread(() -> now = System.nanoTime() - now); + t.start(); + t.join(); + System.out.printf("Fast leerer Plattform-Thread Starten bis Ende (Baseline: \"Thread\": %3.3f ns\n", now / 1000.0); + } + +} diff --git a/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/FiberPerformance.java b/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/FiberPerformance.java new file mode 100644 index 0000000..316afbf --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/FiberPerformance.java @@ -0,0 +1,30 @@ +package pp.fiber.second; + +public class FiberPerformance { + static long now; + + public static void main(String... args) throws InterruptedException { + var NUM = 100; + if (args.length == 1) { + NUM = Integer.valueOf(args[0]); + } + var threads = new Thread[NUM]; + for (var i = 0; i < Integer.valueOf(NUM); i++) { + threads[i] = Thread.ofVirtual().unstarted(() -> { + while (true) + Thread.yield(); + }); + threads[i].start(); // 1. virt. Thread: "Endlos-Daemon" + } + now = System.nanoTime(); + var t = Thread.ofVirtual() + .unstarted(() -> now = System.nanoTime() - now); + t.start(); + t.join(); + System.out.printf("Virtueller Thread Nr. %d starten und beenden (%d virtuelle Threads laufen bereits endlos) %3.3f ns\n", NUM+1, NUM, now / 1000.0); + for (var i = 0; i < Integer.valueOf(NUM); i++) { + threads[i].interrupt(); + } + } + +} diff --git a/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/ThreadPerformance.java b/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/ThreadPerformance.java new file mode 100644 index 0000000..9d0e336 --- /dev/null +++ b/src/pp.09.01-Fiber/src/main/java/pp/fiber/second/ThreadPerformance.java @@ -0,0 +1,31 @@ +package pp.fiber.second; + +public class ThreadPerformance { + static long now; + + public static void main(String... args) throws InterruptedException { + var NUM = 100; + if (args.length == 1) { + NUM = Integer.valueOf(args[0]); + } + var threads = new Thread[NUM]; + for (var i = 0; i < Integer.valueOf(NUM); i++) { + threads[i] = new Thread(() -> { + while (true) + Thread.yield(); + }); + threads[i].start(); // 1. virt. Thread: "Endlos-Daemon" + } + + now = System.nanoTime(); + + var t = new Thread(() -> now = System.nanoTime() - now); + t.start(); + t.join(); + System.out.printf("Plattform Thread Nr. %d starten und beenden (%d Plattform-Threads laufen bereits endlos) %3.3f ns\n", NUM+1, NUM, now / 1000.0); + for (var i = 0; i < Integer.valueOf(NUM); i++) { + threads[i].interrupt(); + } + } + +}