初期CPU:
是一个单进程操作系统,按照时间顺序执行,执行线程也是如此(一核 :核执行的基本单位是线程) ,同一时间只能执行一个线程.
单进程时代的问题:
1.只能顺序执行,一个一个进行处理,效率慢。
2.进程租塞时(执行时卡在某个位置)会带来cpu时间的浪费.
这时就有了多线程/多进程操作系统
多线程/多进程的操作系统如何调度
条件:一个小时执行三个线程.这个时候cpu如何进行调度.
首先会把整个时间线,分成各个时间片,可以理解为时间断落,也就是当前线程最大的执行时间,
如果当前线程的执行超过了最大执行时间,则会直接强制切换到下一个线程进行执行,依此类推 执行顺序类似于
线程a->线程b->线程c->线程a->线程b->线程c.......(这种情况是所有线程执行时间都大于了最大执行时间,也就是都超时了),这样就避免了一直停顿等待的现象.
所以在宏观的角度上看,其实 线程a、b、c是在同时进行,也就是所说的异步(并发 不是并行),但其实每次的执行,只会有一个
线程,这种情况只是cpu在不停的调度而已,才在程序上产生了异步(并发)的效果.说到这里肯定描述的不是特别清楚,因为没有上图:
上完图,如果还是不太好理解的的话,就说明确实是线程用少了,可以多去尝试一下。
多线程/多进程的问题:
设计复杂化:
进程/线程越多,切换成本越大,越浪费资源
在线程A切换线程B时是有cpu消耗的,拷贝记录切换等都会占用cpu.
线程的切换,状态的记录,拷贝等。
系统级的 同步竞争,锁、竞争资源等
壁垒:
进程约 虚拟内存4GB(一般估值)
线程约 4MB
耗费内存
高cpu调度浪费
下一篇GMP调度器
链接地址