【问题标题】:Threads and Reactive Programming in BallerinaBallerina 中的线程和反应式编程
【发布时间】:2020-12-25 03:53:17
【问题描述】:

我刚刚通过阅读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");
        }
    }
  1. 当我运行此代码时,有多少线程在 4 或少于 4 之后运行?
  2. java中线程是非常昂贵的,当我们创建线程的同时,JVM会创建OS级线程,会消耗大量内存。芭蕾舞演员是否也遵循相同的方式(Native Thread 模型)?
  3. 我们可以在芭蕾舞演员中使用轻质线吗?就像 Project Loom(fibers) 将要介绍的那样
  4. 芭蕾舞演员是否完全支持反应式编程?
  5. 芭蕾舞演员是否提供包以无阻塞地连接 MongoDB、Redis 和 Cassandra?我的意思是反应式的方式

【问题讨论】:

    标签: asynchronous wso2 reactive-programming ballerina


    【解决方案1】:
    1. Ballerina 在虚拟机启动时配置的线程池上运行。线程计数可通过环境变量BALLERINA_MAX_POOL_SIZE 进行配置,如果未明确提供,则默认为线程计数 = (逻辑 CPU 计数 X 2)。

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

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

    4. 据我所知,响应式编程是为了解决复杂异步系统编程带来的复杂性而开发的,类似于响应式编程,Ballerina 支持另一种使用异步等待风格(类似于 C#)编写异步系统的方法@987654321 @

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

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      相关资源
      最近更新 更多