Ballerina 中的线程和响应式编程

Naf*_*ema 3 asynchronous wso2 reactive-programming ballerina

我刚刚通过阅读https://ballerina.io/文档开始关注芭蕾舞女演员。当我尝试运行 Hello World Parallel 时,我不知道它在内部是如何工作的?

 import ballerina/io;
    public function main() {
        @strand {thread: "any"}
        worker w1 {
            io:println("Hello, World! #m");
        }
    
        @strand {thread: "any"}
        worker w2 {
            io:println("Hello, World! #n");
        }
        @strand {thread: "any"}
        worker w3 {
            io:println("Hello, World! #k");
        }
    }
Run Code Online (Sandbox Code Playgroud)
  1. 当我运行此代码时,有多少线程在 4 个或少于 4 个的后面运行?
  2. 线程在java中是非常昂贵的,当我们创建一个线程的同时,JVM会创建OS级线程,会消耗大量内存。芭蕾舞演员是否也遵循相同的方式(Native Thread Model)?
  3. 我们可以在芭蕾舞演员中使用轻质线吗?就像 Project Loom(fibers) 将要介绍的那样
  4. 芭蕾舞演员是否完全支持反应式编程?
  5. 芭蕾舞演员有没有提供包连接MongoDB、Redis、Cassandra 不阻塞?我的意思是反应方式

Dha*_*aya 6

  1. Ballerina 在 VM 启动时配置的线程池上运行。线程计数可通过环境变量进行配置BALLERINA_MAX_POOL_SIZE,当未明确提供时,它将默认为线程计数 =(逻辑 CPU 计数 X 2)。

  2. Ballerina 运行时调度程序在预先配置的线程池上工作,它与本地线程没有一一对应的关系,控制流(通常称为线程)称为 a strand,许多链将映射到单个 OS 线程。这是非常相似的green threadsuser level threads或项目织机纤维。

  3. 你得到的只是轻量级线程。

  4. 据我了解,响应式编程是为了驯服复杂异步系统编程带来的复杂性而开发的,类似于响应式编程,Ballerina 支持另一种使用异步等待风格(类似于 C#)编写异步系统的方法https://ballerina .io/learn/by-example/async.html

  5. 大多数 Ballerina 库都是非阻塞的(不阻塞 OS 线程),这意味着使用该库的 Ballerina 程序看起来像使用直接阻塞代码编写的代码,但在幕后,它们由 Ballerina 调度器进行多路复用。因此,如果您指的是反应式编程范式,那么不是,但是如果您指的是非阻塞性和简单性(没有回调等),那么是的。