什么是进程?
可以理解成运行中的应用程序;
什么是线程?
可以理解成 任务知行的通道;
目前的cpu都是多核多线程的;
什么是多核; 多核就相当于有多个cpu;
打一个比方; 一个医院有一个医生(单核),线程就相当于该医生同一个时间段可以给多少个人看病; 线程也可以理解为一个人边吃饭边看电视(双线程); 但是处理吃饭和看电视都是由大脑(cpu)来控制;
但这里面有一个注意的点,不管你有多少个线程;cpu同一个"时间点"只能处理一个线程的事;
多线程的好处就是可以快速切换任务; 就相当于在同一个"时间段 "cpu可以执行多个任务;
什么是并行;
并发就是同一个"时间点"执行多个任务;
什么是并发;
同一个时间段执行多个任务(同一个时间点只能执行一个任务,所以多个任务之间不同的来回切换);
写到这里我突然想到, js中写的定时器上的时间并不是严格意义上的执行时间;
js是单线程的, 它在执行定时器一定是这样的; js把任务分为 主队列和副队列; 现在主队列中有很多任务; 第一条任务就是定时器的任务; 在执行定时器时发现需要2秒后才能执行里面的代码, 那么js就把这个任务放在了副队列; 然后在执行主队列后面的任务; 直到主队列的任务执行完后,在把副队列任务放在主队列中。 所以定时器上的时间并不是严格意义上的执行时间, 因为可能主队列执行的时间就超过了2秒, 但是cpu处理的速度很快,误差一般不会太大;
关于这个定时器分为以下几种情况来讲;
① 如果主队列任务执行完毕, 副队列中的定时器任务还没有到时间执行, 该cpu是如何执行。
cpu一定是在计算定时器的时间;
②如果主队列任务执行完毕,副队列中有两个定时器; 该如何执行;
最开始放入副队列时, 一定会给这个任务一个序号; 例如 一个是1秒的定时器另外一个是2秒的定时器; 那么就给1秒的定时器一个 序号为1的标记;
但我觉得设计模式为应该为权重最为合适;
例如; 不给权重的最先执行; 有权重的 按照权重大小执行; 例如没有时间延迟的 就不给权重(等待主队列执行完就执行副队列当中的任务);
权重的大小就是执行的时间; 例如给第一个需要权重的为1(数值小则先执行);后面又发现一个需要权重的,但是需要比第一个执行的时间早. 那么就为0,但这里有又出现一种情况, 后面又来一个 在0和1之间的权重怎么办;难道要开辟小数点吗?权重重新排序; 或者以小数方式来, 我觉得不太可能,因为计算机计算小数点会比较麻烦;
如果只考虑定时器这种特殊情况, 那么我们直接把定时的时间作为权重数就好了。