【并发编程篇】定义最大线程的方法

文章目录

  • 🍔省流
  • 🏳️‍🌈前言
  • 🛸CPU密集型
    • 🌹代码实现
  • 🛸IO密集型

在这里插入图片描述

🍔省流

池的最大大小如何去设置
使用CPU密集型和IO密集型这2种方法

🏳️‍🌈前言

上一篇文章我们讲解了自定义线程池的方法,里面提到了最大线程池
那么,到底应该怎么去定义最大线程呢

🛸CPU密集型

通常情况下,计算机系统的处理能力取决于两个主要因素:处理器核心数量和线程数。处理器核心表示处理器上的物理处理单元数量,而线程是操作系统调度处理器执行任务的最小单位。

在一个CPU密集型任务中,处理器会尽可能地使用所有可用的处理器核心来执行任务,以最大化利用CPU资源。因此,可以通过将线程数设置为处理器核心数来提高任务执行效率。这是因为多个线程可以并行执行任务,从而减少任务的总执行时间。

假设一个系统有n个处理器核心,我们可以创建m个线程来执行一个CPU密集型任务,其中m <= n。如果创建的线程数大于可用的处理器核心数,那么线程之间将需要分享处理器资源,从而导致任务执行效率下降。因此,通常将线程数设置为可用处理器核心数可以获得最佳性能。

现代操作系统通常会动态调整线程数,以最大化利用可用的处理器资源。例如,在JVM中,使用线程池可以方便地管理线程,并实现动态调整线程数的功能。在实际应用中,选择合适的线程数需要考虑多种因素,例如任务特性、系统负载、硬件资源等。

🌹代码实现

package org.Test6;import java.util.concurrent.*;public class Demo01 {public static void main(String[] args) {//获取CPU有多少核System.out.println(Runtime.getRuntime().availableProcessors());ExecutorService threadPool = new ThreadPoolExecutor(2,Runtime.getRuntime().availableProcessors(),3,TimeUnit.SECONDS,   //超时等待时间new LinkedBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.DiscardOldestPolicy());try {for (int i = 1; i <= 10; i++) {//使用线程池后,使用线程池来创建线程threadPool.execute(()->{System.out.println(Thread.currentThread().getName()+"ok");});}}catch (Exception e){e.printStackTrace();}finally {//关闭线程池threadPool.shutdown();}}
}

在这里插入图片描述

🛸IO密集型

在IO密集型任务中,处理器的大部分时间都是在等待IO操作完成,而不是在执行计算任务。在这种情况下,线程通常会阻塞(即暂停执行),直到IO操作完成因此,与CPU密集型任务不同,IO密集型任务通常需要更多的线程来最大化利用系统资源。

理论上,在IO密集型任务中,可以创建更多的线程来处理IO操作,以便在一个线程阻塞等待IO时,其他线程仍然可以继续执行。这样可以提高系统的整体IO吞吐量,并减少IO等待时间。

然而,需要注意的是,过多的线程可能会导致额外的系统开销,包括线程调度开销、内存占用等。因此,需要权衡考虑,选择适当数量的线程以最大化利用系统资源同时又避免过度消耗系统资源。

在实际应用中,可以使用线程池来管理和调度线程,以便根据实际需求动态调整线程数。通过合理地配置线程池的大小,可以在IO密集型任务中实现最佳的性能和资源利用率。

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296710.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024华为OD机试真题指南宝典—持续更新(JAVAPythonC++JS)【彻底搞懂算法和数据结构—算法之翼】

PC端可直接搜索关键词 快捷键&#xff1a;CtrlF 年份关键字、题目关键字等等 注意看本文目录-快速了解本专栏 文章目录 &#x1f431;2024年华为OD机试真题&#xff08;马上更新&#xff09;&#x1f439;2023年华为OD机试真题&#xff08;更新中&#xff09;&#x1f436;新…

使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程

2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪&#x1f416;。 教程 打开pycharm之后&#xff0c;依次点击File->Settings->Tools->External Tools&#xff0c;进入如下界面&#xff1a; 1、配置快捷打开Qt Designer 点击号&…

ZKP Algorithms for Efficient Cryptographic Operations 1 (MSM Pippenger)

MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记 Lecture 6: Algorithms for Efficient Cryptographic Operations (Jason Morton) Multi-scalar Multiplication(MSM) Naive: nP (((P P) P) P)… (2(2P))…Binary expand $n e_0e_1\alphae_2\alpha2\dots\e_{\…

免费PHP完美运营的最新短视频打赏系统学习版

免费PHP完美运营的最新短视频打赏系统学习版 一、介绍 免费PHP完美运营的最新短视频打赏系统学习版&#xff0c;是一款基于PHP开发的打赏系统&#xff0c;具有强大的功能和稳定的性能。相比于市面上的其他打赏系统&#xff0c;它更加完善&#xff0c;几乎无bug&#xff0c;能…

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下&#xff1a; Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention&#xff1a;https://arxiv.org/pdf/2006.16236.pdf 。官方…

react中使用redux最简单最方便的方式,配合rematch简化操作,5分钟学会

react中使用状态管理的方式也很多&#xff0c;比如redux和mobx等&#xff0c;今天这一片就讲一下redux的入门到熟练使用&#xff0c;主要是要理解它redux的组成有哪些&#xff0c;到怎么创建&#xff0c;和组建中怎么使用三个问题。这里先放上官网文档&#xff0c;不理解的地方…

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

室内设计品牌网站搭建的作用是什么

随着人们生活质量日益提升&#xff0c;对其自身的居住环境也有了较高要求&#xff0c;每个人审美不一样&#xff0c;无论自己居住的房屋还是公司办公/商场等场景都需要设计不同的内容&#xff0c;还有各种设施的摆放及类别等都有讲究&#xff0c;尤其对公司及商场等环境&#x…

JavaOOP篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、有没有可能两个不相等的对象有相同的hashcode二、拷贝和浅拷贝的区别是什么?三、static都有哪些用法?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…

关于Nacos各日志以及解决Nacos中疯狂输出日志的问题

目录 前言1. 各日志内容2. 日志解析2.1 服务端日志2.2 客户端日志 前言 越来越发觉硬盘不够用&#xff0c;发现是运行了2年的Nacos中存了很多log日志&#xff0c;具体如下&#xff1a; 于是得了解下各个日志中的作用&#xff0c;防止不必要的输出占用硬盘空间&#xff01; …

STM32位带

GPIO_SetBits(GPIOF,GPIO_Pin_9);修改为PFout(9)1; GPIO_ResetBits(GPIOF,GPIO_Pin_9);修改为PFout(9)0; 位带的定义&#xff1a; 支持了位带操作后&#xff0c;可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3 中&#xff0c;有两个区中实现了位带。其中一个是S…

05_符号表

05_符号表 一、符号表符号表API设计符号表实现有序符号表 一、符号表 符号表最主要的目的就是将一个键和一个值联系起来&#xff0c;符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据&#xff0c;我们可以根据键来查找对应的值。符号表中&#xff0c;键具有唯…