多线程的那些事(之基础篇)

多线程编程时现代软件技术中很重要的一个环节。弄懂多线程,就要牵涉到多进程吗?当然,要了解到多进程,就要涉及到操作系统。

(1)单CPU下的多线程

在没有出现多核CPU之前,我们的计算资源是唯一的。如果系统中有多个任务要处理的话,那么就需要按照某种规则以此调度这些任务进行处理。什么规则呢?可以使一些简单的调度方法,比如说

  • 1>按照优先级调度
  • 2>按照FIFO调度
  • 3>按照时间片调度等等

当然,除了CPU资源外,系统中还有一些其他的资源需要共享,比如说,内存、文件、端口、socket等。既然系统中的资源是有限的,那么获取这些资源的最小单位是什么呢,其实就是进程。

(2)多核CPU下的多线程

没有出现多核之前,我们的CPU实际上是按照某种规则对线程进行依次调度的。在某一个特定的时刻,CPU的执行还是在某个特定的线程上。然而,现在有多核CPU,一切变得不一样了,因为在某一时刻很有可能确实是n个任务n个核上运行。我们可以编写一个demo进行测试,如果是一个核,运行的语句就应该是一样的。 

#include <Windows.h>
#include <iostream> 
#define MAX_VALUE 10000000

double TestFun(int para)
{ 
    double result=0.0; 
    for(int index = para + 1; index < MAX_VALUE; index +=2 )
        result += 1.0 / index;
    return result;
}
void main()
{ 
    int time1=0,time2=0; 
    double value1=0.0,value2=0.0; 
  
    time1 = GetTickCount();
    for(int index = 1; index < MAX_VALUE; index ++)
        value1 += 1.0 / index;
    time1 = GetTickCount() - time1;
  
    time2 = GetTickCount();  
    value2 = TestFun(0)+TestFun(1);
    time2 = GetTickCount() - time2;

    printf("time1 = %d,time2 = %d\n",time1,time2);
    system("pause"); 
    return;
}

(3)多线程编程

为什么要多线程编程呢?这其中的原因很多,我们可以举例解决

  • 1>有的是为了提高运行的速度,比如多核CPU下的多线程
  • 2>有的是为了提高资源的利用率,比如在网络环境下下载资源时,时延常常很高,我们可以通过不同的thread从不同的地方获取资源,这样就可以提高效率了
  • 3>有的是为了提供更好的服务,比如说服务器
  • 4>其他需要多线程编程的地方等等
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页