程序的执行
进程与线程
一个程序,读入内存,全是0和1构成
从内存读入到CPU计算,这个时候要通过总线
怎么区分一段01的数据到底是数据还是指令?
总线分类为三种:控制线 地址线 数据线
一个程序的执行,首先把可执行文件放到内存,找到起始(main)的地址,逐步读出指令和数据,进行计算并写回到内存。
什么是进程?什么是线程?
一个程序进入内存,被称之为进程?一个QQ.exe可以运行多份儿吗?
同一个进程内部:有多个任务并发执行的需求(比如,一边计算,一边接收网络数据,一边刷新界面)
能不能用多进程?可以,但是毛病多,最严重的毛病是,我可以很轻易的搞死别的进程
线程的概念横空出世:共享空间,不共享计算
进程是静态的概念:程序进入内存,分配对应资源:内存空间,进程进入内存,同时产生一个主线程
线程是动态的概念:是可执行的计算单元(任务)
一个ALU同一个时间只能执行一个线程
同一段代码为什么可以被多个线程执行?
线程的切换
保存上下文,保存现场
问题:是不是线程数量越多,执行效率越高?(初级)
展开:调度算法怎么选?(难)
问题:单核CPU多线程执行有没有意义?(初级)
问题:对于一个程序,设置多少个线程合适?(线程池设定多少核心线程?)(中高级)
线程调度器算法(平均时间片、CFS(考虑权重))