队列的应用场景:
一、CPU的超线程技术
真双核:有两个核心,每个核心有一个指令队列(用户只能看见两个管子)
虚拟四核:给每个核心增加一条虚拟队列,就是一个核心处理两个队列(因为CPU处理的速度很快,可以给它两个管子输入指令,可以使它一直都有任务来进行处理)
四路CPU:
计算核心
一个CPU包含多个计算核心
企业中用32核或者64核
多路:一个机器中包含多个CPU(一般出现在服务器层面—多路–》计算节点–》集群–多个节点)
笔记本一般包含一个CPU
应用场景二:
进程、线程
what?
比如、你-独立的你(包含你的财产,身份。。)就是进程;你在做的事情(看书、说话)就是线程,
进程可以认为是资源的总和,一个进程可以包含多个线程,进程中也包含各种各样的跟操作系统申请的保存空间。
学习的其它语言都是建立在这些基础概念之上的,所以底层学的好的人,向上学习就会学的非常的快。(so 有时间多补补底层知识)
线程可以申请,也可以销毁,对系统资源的消耗是非常频繁的(需要申请,不需要销毁),普通的多线程程序,会频繁的申请销毁,这种程序效率大打折扣。
提出另一种概念,存在一个类,可以管理多个线程(比如这里管理4个),过来几个计算任务后,我把它分配给其中一个线程,又过来几个任务,就分配给另外的线程。
但是不知道放在哪,所以在线程池中就提出了任务队列,任务队列里存放了每一个计算任务。所以线程就从任务队列里去取任务,当有新的任务来的时候,就会被放入到任务队列里面。
任务队列就相当于任务的缓冲区
线程池:函数式编程、范式编程
线程池和任务队列经典面试题:
(一)、【leetcode 86】分隔链表
思路:
1、设计两个头指针(虚拟头节点),small,big,(小于某个值放在小指针,大的放在大指针)
2、连接两个指针
(二)、【leetcode 138】复制带随机指针的链表