Confused about "Multi-threaded worker verticles"

199 views
Skip to first unread message

sql my

unread,
Jan 14, 2020, 12:30:17 AM1/14/20
to vert.x
The vert.x 3 doc says:

Multi-threaded worker verticles

These run using a thread from the worker pool. An instance can be executed concurrently by more than one thread.


But as I know, a worker verticle instance can only be executed by one specific thread from worker thread pool. Do I misunderstand the doc?

Julien Viet

unread,
Jan 14, 2020, 4:17:15 AM1/14/20
to ve...@googlegroups.com
Hi,

this is an extra flag for workers that allows several thread to use a verticle instance concurrently (so one need to set worker=true + multithreaded = true in DeploymentOptions).

This feature has been deprecated in 3 and removed in Vert.x 4.

This can be achieved using an event-loop verticle that delegates to executeBlocking with the ordering flag = false.

Julien


--
You received this message because you are subscribed to the Google Groups "vert.x" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vertx+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/vertx/ef50a0c4-7b3c-44c7-9768-816c9af0a169%40googlegroups.com.

sql my

unread,
Jan 14, 2020, 6:23:45 AM1/14/20
to vert.x
Thanks for your reply. 
I found that a verticle instance can only be executed by one thread. Look at the following code:

package zone.guo.totem;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.eventbus.EventBus;

/**
 * An example of worker verticle
 */
public class WorkerVerticle extends AbstractVerticle {

    private int test = 0;

    @Override
    public void start() throws Exception {
        System.out.println("[Worker] Starting in " + Thread.currentThread().getName()+", verticle instance:"+this);

        vertx.eventBus().<String>consumer("address1", message -> {
            System.out.println("[Worker] Consuming data in " + Thread.currentThread().getName()+", verticle instance:"+this);
        });
    }
}


package zone.guo.totem;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.eventbus.EventBus;


public class MainVerticle extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        System.out.println("[Main] Running in " + Thread.currentThread().getName());

        for(int i=0;i<50;i++){
            vertx.eventBus().send("address1", "hello");
        }
    }
}
package zone.guo.totem;

import io.vertx.core.DeploymentOptions;
import io.vertx.core.Vertx;

public class Main {
    public static void main(String[] args){
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle("zone.guo.totem.WorkerVerticle",
                new DeploymentOptions().setWorker(true).setInstances(5).setWorkerPoolSize(10).setWorkerPoolName("custom-worker-thread"),
                r -> vertx.deployVerticle("zone.guo.totem.MainVerticle")
        );
    }
}

And I got the following output. You can see that a verticle instance is always assgined to a specific thread. Is it expected?

[Worker] Starting in custom-worker-thread-0, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Starting in custom-worker-thread-2, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Starting in custom-worker-thread-3, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Starting in custom-worker-thread-1, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Starting in custom-worker-thread-4, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Main] Running in vert.x-eventloop-thread-1
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-5, verticle instance:zone.guo.totem.WorkerVerticle@32af118e
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-7, verticle instance:zone.guo.totem.WorkerVerticle@2dbc414b
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-8, verticle instance:zone.guo.totem.WorkerVerticle@686acbe6
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-6, verticle instance:zone.guo.totem.WorkerVerticle@1027a61f
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716
[Worker] Consuming data in custom-worker-thread-9, verticle instance:zone.guo.totem.WorkerVerticle@15ae2716







在 2020年1月14日星期二 UTC+8下午5:17:15,Julien Viet写道:
Hi,

this is an extra flag for workers that allows several thread to use a verticle instance concurrently (so one need to set worker=true + multithreaded = true in DeploymentOptions).

This feature has been deprecated in 3 and removed in Vert.x 4.

This can be achieved using an event-loop verticle that delegates to executeBlocking with the ordering flag = false.

Julien

On 14 Jan 2020, at 06:30, sql my <totemg...@gmail.com> wrote:

The vert.x 3 doc says:

Multi-threaded worker verticles

These run using a thread from the worker pool. An instance can be executed concurrently by more than one thread.


But as I know, a worker verticle instance can only be executed by one specific thread from worker thread pool. Do I misunderstand the doc?


--
You received this message because you are subscribed to the Google Groups "vert.x" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ve...@googlegroups.com.

Julien Viet

unread,
Jan 15, 2020, 4:27:50 AM1/15/20
to vert.x
Hi,

this assignment is not expected, perhaps it's random ?

To unsubscribe from this group and stop receiving emails from it, send an email to vertx+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/vertx/d9144088-12a0-41bb-8a22-16cd4ea3fc8c%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages