如何选择使用进程还是线程

  • 服务器端
    • 单进程/单线程
      • 无法使用,不支持多客户端
    • 多线程/多进程
      • 多线程/多进程
        • 写程序优先考虑多线程
        • 什么时候考虑多进程
          • 启动一个可执行程序A,要在A中启动可执行程序B
    • IO多路转接
      • 单线程/进程
        • 支持多客户端连接
        • 效率并不是最高的
          • 所有的客户端请求都是顺序处理的-》排队
      • 多线程IO多路转接
        • epoll
      • 线程池
        • 多个线程得一个集合,可以回收用完的线程
          • 线程池中线程的个数?-》看业务逻辑
            • 密集型业务逻辑:需要大量cpu时间进行数据处理
              • 线程个数 == 当前电脑的核心数
            • 进行Io操作
              • 线程个数 = 2倍的cup核心数
        • 不需要频繁的创建销毁线程
        • 设计思路
          1. 需要两个角色
            - 管理者 1个
              - 不工作(不处理业务逻辑,检测工作的线程的状态,管理现成的个数)
              - 假设工作线程不够用了,动态创建新的工作线程
              - 建设工作的线程太多,销毁一部分工作的线程
              - 动态检测工作的线程状态
            - 工作的线程 ->N个
              - 处理业务逻辑
          2. 需要一个任务队列
            - 存储任务 -> 唤醒阻塞线程 -> 条件变量
            - 工作的线程处理任务队列中的任务
            - 没有任务 -> 阻塞 -> 条件变量
          

posted on 2021-05-28 11:24  lodger47  阅读(120)  评论(0)    收藏  举报

导航