• # Version Java multi-thread

    Posté par (site web personnel) . En réponse au journal Le TapTempo du web, mais plus rapide. Évalué à 1.

    Chez moi, wrk prend 30 % de temps CPU de plus que le processus Java. Difficile donc de déduire quoi que ce soit, quelque soit le nombre de thread que je choisisse, la limite semble identique et le temps CPU pratiquement constant.

    Ce que l'on peut dire, c'est que ce bench est mal parallélisé en Java, avec ce code.

    En version mono-thread:

    Requests/sec: 43544.29
    Transfer/sec: 5.92MB

    En multi-thread:

    Requests/sec: 76680.75
    Transfer/sec: 10.43MB

    J'utilise les paramètres par défaut pour la JVM. Pour passer en version multi-thread, voici le code:

    package fr.spacefox.avatar;
    import com.sun.net.httpserver.HttpServer;
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.util.Random;
    public class AvatarHttpServer {
     private final Random random = new Random();
     private final int port;
     private final int imgCount;
     public AvatarHttpServer(final int port, final int imgCount) {
     this.port = port;
     this.imgCount = imgCount;
     }
     public void run() throws IOException {
     var server = HttpServer.create(new InetSocketAddress(port), 0);
     server.createContext("/", exchange -> {
     exchange.getResponseHeaders().add(
     "Location",
     "https://avatar.spacefox.fr/Renard-" + (random.nextInt(imgCount) + 1) + ".png");
     exchange.sendResponseHeaders(302, -1);
     });
     server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool());
     //server.setExecutor(java.util.concurrent.Executors.newFixedThreadPool(16));
     server.start();
     }
     public static void main(String[] args) throws IOException {
     new AvatarHttpServer(Integer.parseInt(args[0]), Integer.parseInt(args[1])).run();
     }
    }

    que j'ai repris du précédant journal.