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