zoukankan      html  css  js  c++  java
  • 十三、补充知识、线程池、数量谈

    一、补充知识

    1、虚假唤醒

    wait中要有第二参数(lambda)并且这个lambda中要正确判断要处理的公共数据是否存在

    wait,notify_ont/notify_all

    notify_all(),一个线程取到了数据,另一个线程唤醒了但是取不到数据了(容器为空),这就是虚假唤醒

    2、atomic

    读到的atm值可能不是实时的atm值。

    atomic<int> atm

    auto atm2 = atm;//不允许,拷贝构造函数踢掉了

    atomic<int> atm2(atm.load());//允许,load函数就是以原子方式读atomic对象的值

    auto atm3(atm.load());//允许

    atm2.store(12);//store以原子方式写入内容

    二、线程池

    1、场景设想

    服务器程序,客户端,每来一个客户端,就创建一个线程为新用户提供服务。

    如果来了10000个客服,不可能为每个客户都创建新线程。

    编写的代码中,偶尔创建一个线程,这种写法让人不安,如果没创建成功,整个程序就崩溃了。稳定性问题。

    线程池:把一堆线程弄到一起,统一管理,循环利用线程的方式就叫线程池。

    2、实现方式

    在程序启动时候一次性创建好一定数量的线程,10,8,100-200。

    就不会因为临时创建线程浪费时间,浪费系统资源。

    程序更稳定,让人更放心。

    三、线程创建数量谈

    2000个线程是极限

    创建数量建议:

    1、采用某些技术开发程序,接口提供商会建议一些数量,遵照建议和指示

    2、创建多线程完成业务,一个线程等于一条执行通路;100个要堵塞充值(充值要反馈到一个服务器,等待服务器返回,所以会堵塞),那开110个线程是合适的。

    线程数量不要超过500个,

    四、

  • 相关阅读:
    chm文件生成
    java基础--集合
    java基础--多线程
    nexus
    java基础--IO流
    http与https
    java基础--数据结构
    mysql 优化
    maven依赖和传递
    java设计模式
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11271547.html
Copyright © 2011-2022 走看看