码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何避免重复创建线程?创建线程池的方式有哪些?各自优缺点有哪些?


    如何避免重复创建线程?创建线程池的方式有哪些?各自优缺点有哪些?

      • 1、案例分析
      • 2、创建线程池的方式

    1、案例分析

    我们在使用一些app的时候,应该都收到过消息推送,它们往往依赖消息推送服务实现。事实上,互联网大厂都有自己的消息推送服务(又名Message Push Server),通过消息推送服务实现对App的消息推送,不关注掉技术实现的细节,大致过程如图

    在这里插入图片描述
    如果让你来实现一个消息推送服务,要求保证消息推送的实时性,你会怎么设计呢?

    你可能会想到,用多线程技术去做,为每个客户端都创建一个线程,然后启动线程,每来一条需要推送的消息就用创建好的线程发送出去。如图

    在这里插入图片描述
    每当有一个客户端与服务端建立连接,就创建一个线程来执行消息推送服务

    这种方案看起来挺不错,但是可行性如何?其实,这种方案是无法在生产环境实战的。原因就在于不断创建线程这个操作本身是不合理的。

    不慌,我们先看一段代码,在循环中一直创建线程,看看会出现什么情况,如图3所示。

    在这里插入图片描述
    在这里插入图片描述
    可以看到控制台出现了java.lang.OutOfMemoryError报错,即内存已用尽。出现这个错误的原因就在于我们创建了太多的线程,线程对象本身以及线程的调用栈都是要占用内存的,而操作系统的内存是有限的,这决定了我们能创建的线程数也是有限制的,而无限制的创建线程会使内存不断消耗最终超过内存上限从而报错。

    事实上,能创建多少线程数是有一个计算公式的:可创建的线程数 =(进程的最大内存 – JVM分配的内存 – 操作系统保留的内存)/ 线程栈大小。如图所示,粉红色的部分就是可分配线程的内存大小,如果不显式设置-Xss或-XX:ThreadStackSize参数的时候,在Linux x64上ThreadStackSize的默认值就是1024K,也就是1MB大小,如图

  • 相关阅读:
    软件测试也逃不过“35岁危机”?
    Excel VBA 变量,数据类型&常量
    编码器脉冲信号测量2路DI高速计数器PNP/NPN转RS-485数据采集模块 解码转换成标准Modbus RTU协议 YL150-485
    JavaScript 67 JavaScript HTML DOM 67.11 JavaScript HTML DOM 导航
    备战数学建模43-决策树&随机森林&Logistic模型(攻坚站7)
    微信机器人终端1.0未来的设想就是做成telegram一样强大的机器人群体集控终端
    C++ 数据结构与算法(十三)(单调栈)
    MIT的智慧,利用深度学习来解决了交通堵塞
    JDBC编程
    十大创新方向发布 悬镜安全强势领跑软件供应链安全与开发安全
  • 原文地址:https://blog.csdn.net/OnlyoneFrist/article/details/139716937
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号