浅谈多线程编程

1、很多人都知道多线程,也知道多线程快,那么多线程为什么快呢?

让我们来首先解释一下


如上图所示,1、2、3、4分别代表电脑的四个进程。假设每个进程里面开始只有一个主线程,由于电脑的工作原理是轮转时间片进行操作,而操作系统中分配时间片的操作是以线程为准的,操作系统中分配资源的操作是以进程为准的。原来的操作是每个进程抢到的时间片是相同的都是25%,也就是说每个进程的运行时间是相同的,假设四个进程是一样的。但是如果一个进程有多个线程,如1中,则他被分到的时间片明显多了。所以速度肯定快了,因为cpu在他上面花费的时间多了。

此时有8个时间片的户头,进程1中抢到的时间片有12.5%*5 = 62.5%。还有就是时间片轮转也可以是有等级的,在多线程编程的线程中级别比较高,抢时间片的能力也比其他一般的进程快,所以他快。


线程是一个动作,在C语言中就是一个函数,这个函数是操作系统在调用。称之为回调函数(具体概念,自己查查)。也就是操作系统在调用这些线程函数(回调函数函数),既然是操作系统调用这些线程函数,那么这些函数就不该有this指针,为什么呢?因为this指针是C++语言的技术特征,C++语言编译出来的程序去操作系统那执行了,操作系统是老大。那操作系统说了算。由于操作系统不是专门为你C++语言开的,所以我只能给你一块空间,你自己该怎么玩怎么玩,和我关系不大,但是如果你写的东西要改变我(操作系统)的游戏规则,由于这个多线程函数是操作系统调用,不是你们自己家的事了,那么现在你就不能有this指针了,巧的很,C++的静态成员函数就没有this指针。当然全局函数也没有this指针,也可以写成多线程函数,但是感觉就没有了面向对象的意味了。

2、下面在说说C++的多线程编程

在C++中都知道有静态变量,和静态成员函数,当初C++的创始人Bjarne Stroustrup在创建静态成员函数的时候,完全是想让其和静态成员变量形成对称。因为静态成员变量完全可以在一般成员函数中使用,那么为什么还要一个静态成员函数呢?在他的那个年代不会想到最后会出来多线程编程吧,这应该是一个巧合。由于Bjarne Stroustrup是学数学出身,可能是对对称这种东西有种强迫症吧!(猜测),所以创建了只能调用静态成员数据的静态成员函数。那么我们为什么要说到这些呢?对于多线程编程。由于线程的调用是操作系统调用的,我们不能用C/C++描述,所以多线程函数是不能有this指针的,而C++中没有this指针的只有静态成员函数,当然全局函数也没有,但是如果用全局函数的话,没有了OOP的意味,失去了C++面向对象语言的感觉,所以我们如果想保持这个感觉,我们当然还是用静态成员函数中写多线程编程的代码喽。哈哈。








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值