肇庆东莞网站建设怎么做qq业务网站

当前位置: 首页 > news >正文

肇庆东莞网站建设,怎么做qq业务网站,建站优化收费,百度广告推广怎么做承接上文CPU原理简介程序的执行是由控制器发信号推动整个程序一步一步向前走#xff0c;将数据存储在寄存器#xff0c;从程序计数器中获取指令#xff0c;比如先把3放到寄存器#xff0c;再把5放到寄存器#xff0c;再做一个加法#xff0c;加法就是一个指令#xff0c…承接上文CPU原理简介程序的执行是由控制器发信号推动整个程序一步一步向前走将数据存储在寄存器从程序计数器中获取指令比如先把3放到寄存器再把5放到寄存器再做一个加法加法就是一个指令从二进制的角度它也是01构成。QQ.exe从硬盘读到内存里内存里面装的全是二进制01一个程序放到内存里面完全是由二进制01构成。如何区分二进制01是指令还是数据二进制01可以把它看成一个指令比如add指令也可以看作是数据比如5如何区分这个二进制是指令还是数据这是由IO Bridge总线来控制的总线是从内存到CPU之间的一条数据线路。总线分3种类型控制线、地址线、数据线从地址线读过来的就是地址从控制线读过来的就是指令从数据线读过来的就是数据。地址线是由cpu中专门的地址寄存器来控制的通过地址线去寻找地址比如读到的是0101地址就去读取0101地址区域内存储的数字 这个数字只要通过控制线过来的就是指令加法如果是数据线过来的就是数据5。各干各自的事情就看从哪里读过来的。地址线是一个寻址的线QQ.exe这个程序放到内存之后它一定会放到内存的某个地址上比如这个地址是3号地址在3号地址的起始位置是main方法在起步的位置一定会放一条指令操作系统会通知cpu你去读3号地址先把指令读过来读过来指令如果是add它就会通知地址线再把后面的2个数字都读过来读到寄存器然后计算单元开始做add计算计算完了之后存到某个寄存器然后再写回内存。QQ.exe双击之后放到内存里一定会放到内存的某个地址上比如内存地址从1号到1万号这么多的地址比如把QQ.exe放3号地址整个程序占用从3号到2000号地址区间最开始的号一定是main方法所占的最开始读的时候从3号地址开始读操作系统通知cpu我现在要运行一个程序这个程序从3号到2000号你现在帮我运行它从3号地址开始读一条指令过来所以通过控制总线读过来一条指令这条指令是addadd指令的执行是需要数据的需要2个数字相加接下来操作系统会告诉你去哪个位置比如去4号位置、5号位置去把那2个数字读过来放到寄存器。将数据放到寄存器之后运算单元去运算运算完了之后把结果放到某个寄存器再把它写回到内存中的某个位置去每个程序都有自己的地址空间从虚拟内存到真正放到物理内存的时候需要做一个地址的映射。一个程序的执行首先把可执行文件放到内存找到起始位置即main开始的地址进行读取指令和数据进行计算并写回内存。什么是线程什么是进程最开始的进程只能执行一个程序 必须等我把这个程序执行完其他程序才可以执行。最开始的计算机只有一个cpu、一个计算单元让它做程序的计算。先把自己的程序写到闪存卡上插上去按下按钮计算机开始执行计算机执行这个程序的时候决对不会执行另外一个闪存卡这个时候是单任务的。执行35这段代码叫一个任务这个任务放到计算机执行只要它放到内存里面就称之为一个进程只要有一个程序进入内存就可以称为一个进程进程的概念反映到内存里一个程序进入内存被称之为进程。一个程序可以跑多个进程吗一个QQ.exe是可以运行多份的一个程序本身是可以有多个进程的。内存中的2个进程对应的程序是一个随着程序的越来越复杂人们发现不可能同时只一个进程。2张闪存卡就会有2个进程但只有一个计算单元怎么能同时计算2个程序分时间计算即时间分片同一个进程里面也可能要求2个不同的任务同时执行比如一个带图形的界面输入数字服务端做计算也要响应用户的输入也可能正在接受网络传输的数据即有多个任务在同时进行。同一个进程内部有多个任务并发执行的需求比如一边计算、一边接受网络数据、一边刷新界面需要设计一种机制同时并发的运行能不能把原来的一个进程分成3个进程其实没有必要引入线程的概念完全用多进程就行了但进程有个严重的问题每个进程都有自己地址空间进程之间有同步和共享数据的过程很容易出现一件事情写我自己进程的时候很容易把另外的进程搞死到此终于发明了线程。多线程执行多个任务只使用了计算单元并没有自己具体的地址空间如果这3个任务想去访问数据的话访问的是进程里面的同一份空间的数据即共享进程的空间但是并不共享计算。进程是静态的概念一个程序只要放到内存分配对应的资源主要是内存空间线程是动态概念可执行计算任务。第一个进程进入内存之后都会对应一个主线程进程是分配资源用的分配的资源是和存储、文件、网络相关的最主要的是空间资源进程都有自己的空间线程是共享进程的空间。多个线程访问的进程中的同一份数据就会产生并发的问题。线程是一条一条指令执行的数据在进程里。协程是用户级别的线程。为什么同一个代码可以被多个线程所执行线程是可执行的计算单元做任务计算这颗cpu或这个计算单元正在执行这段代码另外一个cpu正在执行的也是这段代码2个线程同一份代码即同一份指令同一份指令怎么可以有多个线程在执行虽然是同一份指令但有可能里面的数据是不一样的每次执行参数都是不一样的比如递归第一次入参是n第二次入参是n-1即便参数是一样的也可以同时执行2次这里就会牵扯到线程切换的问题cpu正在执行t1t1有它自己的指令和数据这些数据是需要放到寄存器的在t1没有执行完的时候比如10多毫秒的时间片到了切换到t2t2执行完回来又轮到t1t1不需要从头开始执行要把t1执行到哪里了给记录下来保存好上下文t1执行到了哪条指令以及t1在寄存器是什么状态全部放到一个缓存里这个缓存是位于整个进程空间的这叫保存现场这就是线程切换的过程但缓存宕掉了就会丢失简单的理解为存储到了内存里严格来讲是存到了锁存器中。线程的切换需要保存上下文保存现场是不是线程数量越多执行效率越高一个线程正在等待网络的输入但网络还没有输入只有一个线程一个cpu的情况下就等着这个时候显然需要把你的计算资源切换给其他人使用所以中间有个切换的过程10个线程可以切换若有1万个活着的线程操作系统必须保证每个线程都有时间来执行不然就不叫活线程了 那就会把整个线程资源全部耗在线程切换上了。对于一个程序或一个线程池设置多少个线程合适线程池设定多少核心线程比如有1颗cpu如果一个线程有50%的时间做计算剩下的50%的时间等待着网络的输入和输出在一颗cpu的情况下多少个线程可以充分利用好这个cpu答案是2个线程在这个线程50%的时间计算完等待网络输入和输出的时候切换给另外一个线程使用。根据线程等待的时间和计算时间的比值来计算所需的线程数这里有一个理论上的计算公式Ucpu是期望cpu的利用率比如期望cpu利用率是100%100% * (150% / 50%)2个线程1颗cpu 2个线程2颗cpu就是4个线程。当然这是理论但实际中不能精确的计算出来多少时间做计算多少时间做wait 最终还是要压测做决定。这里面有个理想的情况 整个机器都被我这个进程所使用其他进程不用但是操作系统自己也有线程其他正在跑着的程序自己也会有线程那肯定会影响我这个进程所以理论计算的结果会有一些偏差实际中肯定是要做压测可以通过理论计算出来一个初始值比如10将线程数设置为10个来做压测看看是否达到期望值再根据实际做调整。