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

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

(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>其他需要多线程编程的地方等等
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值