原则:充分利用系统资源,并且要用到恰当的地方。
1,为什么需要多线程? 如果计算机只有一种资源,并且线程只消耗这种资源,确实不需要多线程。而事实是计算机拥有多种资源,比如cpu,内存,磁盘等,当一个线程消耗某种资源的时候,如果没有其他线程,其余的资源这段时间就处于闲置状态,多线程能够提高系统资源的利用率。
2,为什么说并非多线程就一定好? 线程切换也需要消耗系统资源,而这种消耗是没有价值的,当线程切换的消耗远大于程序本身逻辑的资源消耗时,不适合使用多线程,单线程就行。
3,大多数的多线程服务的线程职能都是一样的吗? 通常服务可以被分割为多种任务,而每种任务都习惯于单独的对应一个线程池处理,比如高并发服务中可以是主线程负责监听连接消息并创建读写套接字,用一个线程池处理读写套接字上的消息,另外的一个线程池处理从套接字中收到消息的业务逻辑处理。
4,进程中线程的数量怎么确定? 如果线程总数一定,消耗不同资源的线程可以通过业务轻重确定配比。
5,多线程的应用场景? a,主线程生产任务放入队列,子线程池从该队列中取出任务并消费。 b,有两个队列,分别为Empty和Task,主线程从Empty中取出空任务(空任务可以提前创建也可以实时创建)并填充任务数据,将其放入Task队列,子线程池中线程竞争从Task队列中获取任务并处理,清除任务数据后将其放入Empty队列。 c,线程包裹在类对象中,对象完成初始化工作(包括线程运行需要的一些成员变量,一个定时器,一个任务管道,一个退出管道,一个事件循环器),创建线程并启动,包裹线程对象被传递到线程启动函数中;线程启动函数创建协程并启动,同时启动事件循环器接受消息;主线程收到任务后随机从包裹线程实例数组中选择一个实例,并将任务写到该实例的任务管道中,关联的回调函数被激活从管道读取数据写入到该实例的任务队列变量中,并唤醒协程竞争任务,并处理。
6,线程同步控制?