为了提升QPS,http多线程究竟在哪方面帮助了你

首先先来看一下内核态和用户态

刚开始看着一块,以前只是在大学期间的基本了解

先上一张图,c语言中最简单的操作:print操作

为了提升QPS,http多线程究竟在哪方面帮助了你

所有的硬件连接都基本上是由操作系统的内核态控制,那么这个print操作就涉及到键盘,显示器等物理I/O

执行步骤:

1.用户程序有一个语句调用了库函数printf(),在printf()函数中又通过一系列的函数调用,最终转到调用write()函数,

2.在write()函数对应的指令序列中,一定有一条用于系统调用的陷阱指令。该陷阱指令执行后,进程就从用户态陷入到内核态执行。

3.Linux中有一个系统调用的统一入口,即系统调用处理程序system_call()。CPU执行陷阱指令(Trap Instruction后,便转到system_call()的第一条指令执行。在system_call()中,将根据EAX寄存器中的系统调用号跳转到当前的系统调用服务例程sys_write()去执行。

4.system_call()执行结束时,从内核态返回到用户态下的陷阱指令后面一条指令继续执行。

那么这个系统指令执行的过程中,在单核CPU和多核CPU的区别又是什么呢?

在多线程情况下,对于多核CPU的利用率有没有什么提升呢?

 首先epoll已经在内核态上帮我们做了硬件的优化,那么在用户需要做的就是平衡CPU计算和IO计算

很多人都知道线程数不是越多越好,但是设置多少是合适的,却又拿不定主意。其实只要把握住一条原则就可以了。

这条原则就是将硬件的性能发挥到极致。

具体的网上有很多例子,我就不在此瞎扯淡了