CPU密集型任务会阻塞 Node.js 吗

简介: CPU密集型任务会阻塞 Node.js 吗
+关注继续查看

让我们使用加密任务做个简单测试:image如图所示,连续执行四次加密任务,打印耗时,结果会发生什么?


结果输出:

Hash:  1232
Hash:  1237
Hash:  1268
Hash:  1297

这四次加密任务计时的起始时间都是相同的,然后最终的结束时间却几乎一致,这个结果说明了什么?说明它们是并发执行的。

image


如果不是并发执行,那么结果就会如下图所示:image


那么为什么这里没有发生阻塞?imageNode.js 的执行过程如上图所示,我们要注意的是 libuv 默认使用了四个线程!上述示例中的四个加密任务分别推送到了四个不同的线程中去并发执行,所以才没有发生阻塞。


那么问题来了?如果连续执行五个加密任务呢?image


输出结果:

Hash:  1432
Hash:  1437
Hash:  1468
Hash:  1497
Hash:  2104

可以看到前四个任务仍然是并发执行的,但是第五个任务发生了阻塞。

image为什么?因此 libuv 的四个线程都在忙碌,第五个任务只有等待线程的任务执行完毕才能推送到线程中去执行。


过程如下图所示:


1、四个线程都在忙碌,其它任务必须等待:image


2、某个线程任务完成,继续执行其它任务:image



libuv 线程池中的线程数量是否可以设置?通过环境变量 UV_THREADPOOL_SIZE 即可设置。


比如:image我把线程数设置为 5 ,执行的结果就会是下图所示:

image请注意测试环境的 CPU 核心数是四个,需要说明的有两点:第一,五个任务被推送到了五个线程中去并发执行,这一点上文已经说明;第二,每个任务的耗时有了明显的增加,为什么?因为我们只有四核,但是却有五个线程,操作系统需要进行平衡调度、通过上下文切换以保证每个线程分配到相同的时间去执行任务。

目录
相关文章
|
3月前
|
JavaScript 前端开发 调度
使用 setTimeout 拆解一些 CPU 密集型的执行任务
使用 setTimeout 拆解一些 CPU 密集型的执行任务
27 0
|
5月前
|
SQL 缓存 人工智能
CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点
CPU密集型与I/O密集型是在计算机上执行任务的两种策略,在并发执行任务场景下,我们需要选择使用多线程或多进程; 如果是IO密集型任务,使用多线程,线程越多越好; 如果是CPU密集型任务,使用多进程,线程数量与CPU核心数匹配。
|
10月前
|
消息中间件 存储 缓存
【操作系统入门到成神系列 五】CPU 是如何执行任务的
【操作系统入门到成神系列 五】CPU 是如何执行任务的
【操作系统入门到成神系列 五】CPU 是如何执行任务的
|
10月前
|
Java 数据库 芯片
物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
一般情况下,大家对Python原生的并发/并行工作方式:进程、线程和协程的关系与区别都能讲清楚。甚至具体的对象名称、内置方法都可以如数家珍,这显然是极好的,但我们其实都忽略了一个问题,就是具体应用场景,三者的使用目的是一样的,换句话说,使用结果是一样的,都可以提高程序运行的效率,但到底那种场景用那种方式更好一点?
物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
|
机器学习/深度学习 数据库 C语言
一分钟明白IO密集型与CPU密集型的区别
CPU密集型 CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作CPU读写IO(硬盘/内存)时,IO可以在很短的时间内完成,而CPU还有许多运算要处理,因此,CPU负载很高。
|
Java 数据库 芯片
物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
一般情况下,大家对Python原生的并发/并行工作方式:进程、线程和协程的关系与区别都能讲清楚。甚至具体的对象名称、内置方法都可以如数家珍,这显然是极好的,但我们其实都忽略了一个问题,就是具体应用场景,三者的使用目的是一样的,话句话说,使用结果是一样的,都可以提高程序运行的效率,但到底那种场景用那种方式更好一点? 这就好比,目前主流的汽车发动机变速箱无外乎三种:双离合、CVT以及传统AT。主机厂把它们搭载到不同的发动机和车型上,它们都是变速箱,都可以将发动机产生的动力作用到车轮上,但不同使用场景下到底该选择那种变速箱?这显然也是一个问题。
|
C语言 Python
OS - 什么是CPU密集型、IO密集型?
OS - 什么是CPU密集型、IO密集型?
257 0
|
存储 缓存 算法
你不好奇 CPU 是如何执行任务的?
CPU如何读写数据?CPU如何选择线程?
你不好奇 CPU 是如何执行任务的?
|
存储 缓存 并行计算
任务2.1 认识和选购CPU
小王想选购一款合适的CPU用于动漫制作,面对众多的CPU型号及更多的参数,他该如何选购呢?在本任务中,我们将学习和了解计算机主机系统中的CPU的相关知识,并能结合自身需求进行合理选购。还要会利用CPU-Z或者鲁大师等软件识别出CPU的生产厂家、主频、缓存等性能参数。
任务2.1  认识和选购CPU
|
C语言 C++ Python
什么是CPU密集型、IO密集型?
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。
383 0
相关产品
云迁移中心
推荐文章
更多