单线程多线程、并行和并发
单核与多核
单核就是CPU集成了一个运算核心,双核就是两个运算核心,相当于两个CPU一起工作。
x64和x86
x86是对基于intel处理器的系统的标准缩写,它是对所有*86系统的简单通配符定义,例如8086,80286等等,这些CPU都是指令兼容的,所以都用x86来标识。
这里,64位是相对于32位而言的,这个位数是指CPU General-Purpose Registers,通用寄存器的数据宽度为64位,64位指令集就是运行64位数据的指令,也可以说处理器一次可以运行64bit数据。
64bit有两大有点:可以进行更大范围的整数运算,可以支持更大范围的内存。
除此以外,指针在x86中是四个字节,而在x64中是8个字节,这也是为什么64bit可以支持更大范围的内存;各基本类型如下
i = sizeof(int); // x86:4 x64:4
i = sizeof(long); // x86:4 x64:4
i = sizeof(void*); // x86:4 x64:8
i = sizeof(short); // x86:2 x64:2
i = sizeof(float); // x86:4 x64:4
i = sizeof(double); // x86:8 x64:8
i = sizeof(int*); // x86:4 x64:8
i = sizeof(WORD); // x86:2 x64:2
i = sizeof(DWORD); // x86:4 x64:4
i = sizeof(LONGLONG); // x86:8 x64:8
i = sizeof(HANDLE); // x86:4 x64:8
i = sizeof(HWND); // x86:4 x64:8
i = sizeof(bool); // x86:1 x64:1
i = sizeof(char); // x86:1 x64:1
并发和并行
并行,是指两个或者多个事件在同一时刻发生;并发,是指两个或多个事件在同一时间间隔内发生,在操作系统中,并发是指有几个程序都处于启动运行和运行完毕之间,而且几个程序都是在同一CPU上,但是任意时刻点只有一个程序在CPU上运行。
并发程序之间,除了竞争某一相同资源,例如处理器,缓冲区,变量等等之外,还存在直接制约,体现为某一程序需要另一个程序的计算结果。
网络服务器上,并发指的是同一时刻能处理的连接数,比如服务器能建立1000个tcp连接,即服务器同时维护1000个socket,并发树即为1000.
并行强调同时进行,并发则可以使用时间片来间隔实现。
效率问题
实际上,这个可以考虑为并行和并发的效率问题,并行当然可以提升效率,但是并发则不然。
对于单核CPU,如果能够使用单线程较好的利用CPU,那么效率较高,而使用多线程并发,则存在等待时间,此时效率不一定高
而对于多核CPU,如果能够使用多线程并行执行任务,那么效率比单线程要高。