关于多核编程

来源:互联网 发布:google play mac 编辑:程序博客网 时间:2024/06/05 06:25

      今天突然想起了大学时期的专业课:操作系统,上面介绍了好多计算机cpu,内存原理和设计方面的知识,其中我们讨论的基础大多是在单核CPU上进行的操作。那多核呢,其中涉及的问题主要有哪些呢?

    我们经常听到一句话那就是:偶吧,,运行时间很长呀,我们开启多个线程噻,但是多线程真的就能节约时间么?

    先让我们在单核情况下看一看:

     进程由三部分组成,程序,数据,进程控制块(PCB),当我们将程序设置成多线程时,各个线程就变成抢态状态,cpu不管采用哪种轮转策略来为进程服务,都需要在线程之间切换,这是要有时间和空间开销的,每次轮转时都需将进程的运行状态记录到PCB中,如此下来多线程运行时间肯定比单线程要多。

   在多核方面呢,如果各个核负责各个线程那最好不过了,可是实际情况果真如此么?这就带来了多核编程方面不可回避的三个问题:负载均衡,顺序依赖,同步。这里我借用别人的举例来说明,一个形象的例子就是把编程比作写书,理论上10个作者同时写一本书应该会比一个人写快10倍。但是他们首先要把任务均匀的分成10份,否则任务最多的那个作者会拖后腿肯定就快不了10倍了。但是呢光这个还不够,如果这个故事中的某一部分必须要在其他部分写完之后才能写,这种顺序上的依赖关系也会拖慢速度;而且10个作者的故事情节还得一致,那么他们肯定少不了沟通啊,这又慢了一点。

  所以啊所以,如果我们不能从根本上摒弃传统程序设计方式 ,当多核编程来临时(其实已经来了,只不过我们还无动于衷)我们是不是要向大清朝那样闭关锁国啊,哈哈,,,,,

  现在我们使用的高级语言中的并发库有时是挺好用的,特别是java在jdk5就提供了,lock和condition的包,但却不能从根本上解决并发编程的困难,最根本的原因是这些语言并不是天生为并发而设计的,这就决定了所有的库都只能给你提供并行编程最原始的工具,

so,在硬件交给芯片一类的设计师处理的同时,我们搞软件的就转向Erlang吧。。。。。。。。。。哈,,,,,

最后不忘加一句歌颂社会主义的标语:壮哉,我大天朝。


0 0
原创粉丝点击