你先了解中断,消息,
再去了解钩子。
中断:CPU执行时,单核CPU同时只能执行一条流水线。现在多核,是有几核就能同时执行几条流水线。流水线是顺序执行,现在有乱序执行机制,但实质也是也顺序执行。
乱序执行,同时在不同位置取二条指令,填充流水线执行序列,并且记录后面指令的位置。当流水线执行到这个位置时,就直接取结果,如果流水线执行时发现不是这个位置,而是另一条分支时,就需要冲洗流水线,把流水线上选择错误的指令序列清洗掉和还原结果。这个是分支预测,这个功能,好像INTER比AMD稍强一点,是现代高速CPU的基础之一。
CPU响应外设的事件,使用的就是中断。
多进程、多线程:由操作系统进行调度,分配一条流水线上的执行时间,达到单位时间内同时执行多个进程,多个线程的目的。
如,1秒钟的流水线时间,被分配给了50个线程,每个线程执行了20毫秒,我们看来,系统同时在运行50个线程,实际上只使用了一条流水线。
进程由线程组成,每个进程最少有一条线程,线程是操作系统进行调度进行的基本对象。
键盘,鼠标:属于外设,当它运作时,会发中断给操作系统。
中断调度。当CPU收到一个中断后,就会中断当前流水线的运作,转为执行中断的内容,中断内容结束后,就继续恢复流水线。
WINDOWS消息。系统分配了线程用来处理消息缓冲,当该线程执行时,检查消息缓冲中,是否有消息,有消息,根据消息的级别:如全局、局部等不同,把消息复制给对应的线程的消息缓冲。钩子,就是在这个消息处理中,注册一个信息,告诉 这个线程,某个类型的消息要复制给我。钩子也分为几类,一类是接收就行,一类是要处理完成后消息才能继续向后传递。网卡抓包类软件就是使用第一类钩子,所以它没办法修改封包,只能抓取封包。
应用程序主线程:负责读取自己的消息缓冲,然后根据消息进行处理。
如果应用程序在几个时间段中,都未能处理完,导致没时间去读取消息缓冲,WINDOWS就报该程序未响应。
你自己分析一下,钩子多到什么程度,才会影响系统性能?