我的编程空间,编程开发者的网络收藏夹
学习永远不晚

给自己写的程序条毛病(r12笔记第68天)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

给自己写的程序条毛病(r12笔记第68天)

   前几那天写了一个Java程序模拟生产者消费者,当时写完还感觉不错,但是这几天再看的时候发现还是有很多的不足之处,给别人挑毛病不大好意思,尺度拿捏不好还容易得罪人,男人就对自己狠一点,我就给自己多挑挑程序的毛病,这个可以有,有些细微的毛病就马上改了,有些有难度的,我也记录下来,不断的改进,看起来简单的程序写好了才算是一个合格的程序员。

   感兴趣的同学可以移步这里,看看之前写的程序。

http://www.toutiao.com/i6420749007307407873/

   我大体总结了下,从日志中可以看出有这么几个明显的小问题。

  1. 第一种模式和第二种模式的线程数不同,明显第二种模式的线程日志有长得多。

  2. 第二种模式的消费者申请的消费产品数和规格不符,应该为10的倍数,第二种模式没有取整,这样看起来不是很清晰。

  3. 第一种和第二种模式,生产者和消费者对应的产品数不能为0,这种场景其实不应该存在的,所以就可以考虑从随机数或者从对象层级进行校验,至少规范来看,入参要规范,所以我从随机数生成逻辑上进行校验控制。

  4. 生产线程和消费线程虽然是动态生成,但是从日志可以看到有明显的串行执行的痕迹,可以把这个过程做成真正的动态,库存不足,生产者生产,库存充足,消费者消费。如果把生产者消费者这个模型看做是一个系统,就好比一个齿轮,一个直接的目标就是让齿轮转动的快。

  5. 无论第一种模式还是第二种模式,如果碰到条件不满足的情况就会存在等待的情况,这个等待的频率可以借鉴一些数据库层面的经验,来优化控制一下,比如第一次等待,sleep多少毫秒,第二次sleep多少毫秒,这样有一个基本的控制范围,减少中断的次数。

  6. 这个库存其实就像MySQL面刷脏页一样,脏页数达到多少的时候来触发生产者生产,能够尽可能减少生产者等待的频率,提高消费者消费的频率。

  7. 其实目前的实现,如果细细想来,原本生产者消费者的性能瓶颈现在落到仓库上,但是目前仓库应该有几个门,控制入库,控制出库,而不能总是在一个门里,要么把门加宽,要么多加几个门,入口和出口分开。

  8. 为了尽可能提高吞吐量,整个实现过程也可以考虑通过事务的方式来控制,比如放到一个仓库的表里,对于数据进行实时的变更和查询,或者使用其他的数据结构。

  9. 为了尽可能突破单个仓库的瓶颈,可以考虑设置多个仓库,这样库存能够大大大提高,而且是一个线性扩展的方式,当然这就会引进更多的考虑和方案

  10. 尽可能提高消费者线程的使用率,比如考虑使用线程池等等方式来实现。

  最后硬凑一个观点吧,那就是一个牛叉的程序构思好了,能够在短时间内实现出来,光说不做太虚,能说能做才是真。

  或者说你有更多的建议,也给提提吧,感激不尽。

给自己写的程序条毛病(r12笔记第68天)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

给自己写的程序条毛病(r12笔记第68天)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

给自己写的程序条毛病(r12笔记第68天)

前几那天写了一个Java程序模拟生产者消费者,当时写完还感觉不错,但是这几天再看的时候发现还是有很多的不足之处,给别人挑毛病不大好意思,尺度拿捏不好还容易得罪人,男人就对自己狠一点,我就给自己多挑挑程序的毛病,这个可以有,有些细微的毛
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录