`
mryufeng
  • 浏览: 982722 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Async线程pool及其作用

阅读更多
erlang能够利用多核心cpu的基础设施有2个 1. 进程调度器 2. async 线程池。

其中 async 线程池主要设计用来 能够在driver里面异步的执行费时操作, 因为driver是在调度器里面调用的 不过费时操作的话 会block掉整个调度器 而且调度器资源有限。

细节参见 erl_async.c

Driver API:

Asynchronous calls
    The latest Erlang versions (R7B and later) has provision for asynchronous function calls, using a thread pool provided by Erlang. There is also a select call, that can be used for asynchronous drivers.

long driver_async (ErlDrvPort port, unsigned int* key, void (*async_invoke)(void*), void* async_data, void (*async_free)(void*))

void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data)


其中erlang自己的file driver就大量依赖于异步线程池 所以如果文件操作密集型的程序可以考虑加大池的数量。

erl有2个参数和这个池有关:

+a size
    Suggested stack size, in kilowords, for threads in the async-thread pool. Valid range is 16-8192 kilowords. The default suggested stack size is 16 kilowords, i.e, 64 kilobyte on 32-bit architectures. This small default size has been chosen since the amount of async-threads might be quite large. The default size is enough for drivers delivered with Erlang/OTP, but might not be sufficiently large for other dynamically linked in drivers that use the driver_async() functionality. Note that the value passed is only a suggestion, and it might even be ignored on some platforms.
(大量池的时候 要考虑栈内存的影响 缩小这个值)

+A size
    Sets the number of threads in async thread pool, valid range is 0-1024. Default is 0.

总结起来就是如果需要大量的费时操作 又需要原生的Api来做的话 可以考虑写个driver来利用这个特性。
2
0
分享到:
评论

相关推荐

    关于Spring中@Async注解使用

    Spring 中 @Async 注解的使用 @Async 注解是 Spring 框架提供的一种异步执行方法的实现方式,从 Spring 3.0 版本开始提供。使用 @Async 注解可以将方法标识为异步方法,通过 SimpleAsyncTaskExecutor 执行,但不...

    Spring Boot多线程demo

    Spring Boot 中使用多线程的方式有很多种,最简单的方式就是使用 @Async 注解来实现。下面我们将详细介绍如何使用 @Async 注解来实现多线程编程。 多线程前言 在 Java 中,多线程编程是非常重要的一种技术,通过...

    C#多线程编程实例

    最后,`UseThreadPool`可能演示了如何使用线程池来优化线程管理。线程池是一种预先初始化的线程集合,用于执行短期任务,可以减少创建和销毁线程的开销,提高系统效率。 总结起来,这个压缩包提供了一系列的C#多...

    Python mutiprocessing多线程池pool操作示例

    ### Python multiprocessing 模块中的多线程池 Pool 操作详解 #### 一、引言 在现代编程中,为了提高程序的效率与响应性,多线程与多进程技术被广泛应用。Python作为一种流行的编程语言,提供了多种并发模型,其中`...

    spring boot 多线程.docx

    - **max_pool_size**: 最大线程数,当任务较多时,线程池可以创建的最大线程数。 - **queue_capacity**: 队列容量,表示等待执行的任务队列的最大长度。 - **name_prefix**: 线程名称前缀,用于标识线程池中的线程。...

    多线程简单应用测试C#源代码

    1.线程池 (Thread Pool): 线程池是用于执行异步任务的托管线程集合。当你想执行许多类似的异步任务时,使用线程池可以有效地管理资源。 2.创建新线程 (Manual Thread): 你可以使用 Thread 类来创建并管理一个新线程...

    多核程序设计PPT(线程同步,并行计算等等)

    另一种是Worker Thread Pool模式,线程池预先创建一组线程,当有任务需要处理时,任务被分发到线程池中等待执行的线程,避免了频繁创建和销毁线程的开销。还有任务队列模式,它使用一个线程安全的任务队列来存储待...

    spring 多线程队列执行

    通过配置`corePoolSize`(核心线程数)、`maxPoolSize`(最大线程数)、`queueCapacity`(任务队列容量)等参数,我们可以根据应用需求定制线程池的行为。 2. **任务队列(Queue)**: 任务队列是线程池中的一个...

    精品课件 Python从入门到精通 第18章 使用进程和线程(共18页).pptx

    此外,`multiprocessing`模块还提供了进程池`Pool`,通过`apply_async()`和`apply()`等方法来方便地执行函数,同时提供`close()`、`terminate()`和`join()`方法来管理进程池。 **进程间通信**是多进程编程中的关键...

    asyncPool:一个用多线程安排异步任务的库

    一个用多线程安排异步任务的库。 例如,您在一个数组中有多个数字,对于每个元素,您都希望请求一个 url,然后对结果执行一些操作。如何? 你可以这样写: var arr = [ 1 , 2 , 3 , 4 ] ; // the array contains ...

    Spring @async方法如何添加注解实现异步调用

    * 使用 @Async 注解时,需要在 applicationContext.xml 文件中添加 `<task:annotation-driven executor="annotationExecutor" />` 和 `<task:executor id="annotationExecutor" pool-size="20"/>` 配置。 使用 @...

    多线程并发编程参考资料

    - 为提高系统效率,C#的`ThreadPool`和C++的`std::thread_pool`(C++20)提供线程复用,避免频繁创建和销毁线程的开销。 8. **并发编程模式**: - 生产者消费者模型:使用队列作为缓冲区,生产者线程添加数据,...

    Async Http.zip

    所有的请求利用线程池(thread pool)来调度同步资源的使用; 4. 提供GET/POST 服务; 5. 文件上传功能; 6. 类库十分小巧,只需要25K。 7. 自动尝试连接,在网络不稳定是特别有用; 8. 可以将cookie保存在app中。 ...

    C#多线程编程实战_随书源码

    6. **线程池(Thread Pool)**:线程池是一种优化线程使用的技术,它可以重用已创建但尚未结束的线程,从而减少创建和销毁线程的开销。例如: ```csharp ThreadPool.QueueUserWorkItem(new WaitCallback...

    C#多线程不阻塞[参照].pdf

    // Calling Foo Async for (int i = 0; i ; i++) simpleDelegate.BeginInvoke(null, null); ``` 使用BeginInvoke()方法,我们可以异步调用Foo()函数,而不需要等待其完成。控制将返回到调用方马上,不需要等待...

    Spring Boot Async异步执行任务过程详解

    需要注意的是一定要在外部的类中去调用这个方法,如果在本类调用是不起作用的,比如this.saveLog()。 四、启用异步任务执行 最后在启动类上开启异步任务的执行,添加@EnableAsync即可。这样,我们就可以使用@Async...

    Spring中@Async用法详解及简单实例

    在Spring框架中,@Async注解用于实现异步方法调用,这是Spring 3.x引入的一个特性,旨在简化多线程编程,提高应用程序的性能和响应速度。在传统的同步调用中,程序会按照顺序执行各个步骤,等待每个方法执行完毕后才...

    Async Http

    Async Http介绍: ... 众多App都使用了这一类库进行网络请求操作,包括一些... 所有的请求利用线程池(thread pool)来调度同步资源的使用; 4. 提供GET/POST 服务; 5. 文件上传功能; 6. 类库十分小巧,只需要25K。

    wasm-mt:用于Rust和WebAssembly的多线程库

    您可以简单地使用Rust闭包对线程进行编程,并使用async/await对其进行编排。例子wasm-mt-pool wasm-mt基于wasm-mt线程池库。 [| ] 您可以在浏览器中运行以下所有应用! EXEC -如何使用wasm_mt 。 [| ] fib-使用嵌套...

Global site tag (gtag.js) - Google Analytics