由于最近在上并行程序设计课的时候,老师谈到Unix能够进行多线程编程,具体还没来得及探究到底怎样的多线程,不过我想应该能够作到“指哪打哪”,也就是能够在多核处理器上,人工控制某个线程到某个内核中进行运算。固然,我以为这个须要程序员须要有比较深厚的功底,最基本的是系统能够利用多核来为多个线程进行部署。程序员
以上说的是“单机”的并行,或者能够说是并发。那么扩展到集群,我想你们都了解Hadoop,本科毕业那会的论文也是搭建一个Hadoop平台,而后写个程序跑一下,具体也没太深刻细究。固然,也有人提出(那本书好像是叫《分布式存储。。。》)hadoop主要是为大公司服务的,对于小规模集群可能并不适用,何况Hadoop只能运行在Linux机上,Windows机就不行了编程
综上两个观点,一个是并行观点,另外一个是异构的观点,先提出下面的多机多级并行框架:并行异构运算框架。多线程
一、该框架确定不能凌驾于操做系统之上,由于这个框架就是为了适应不一样操做系统而产生的。我记得曾经有一位淘宝作数据挖掘的工程师给咱们来说座说过,咱们PC机的计算资源利用率比较低,而不少企业可能利用其安装的软件来利用咱们的计算资源。其实这个就是我要描述的框架的原型。经过软件客户端,部署额外的线程,与远端的主线程进行交互,实现多线程的并发并行,从而实现分布式计算。并发
二、而后再来讲说应该用什么语言,由于本身水平比较烂,因此其实更关心的是用什么语言。固然像Java这样的语言是最好,跨平台,运行效率又高,也不用太操心硬件层的调用,全部的机器都是一个妈产出,都不用针对不一样机器再编译。框架
可是我以为C++或者C可能更合适。首先,自己这个框架是一个辅助工具,他不干实际的工做,只是一个协调调度,就好像企业,管理层不可能养太多人,而是几我的,甚至一我的,看似拿着很高的工资,可是一我的月薪2万和四我的月薪5钱,绝对不是等同的。量越大,消耗的资源就越多,因此做为一个辅助框架,应该须要更高的性能做为支撑。分布式
其次就是异构这个点,C++和C都有现行标准支持,虽然各个厂家在具体实现细节上有差别,可是目前我能想到这个框架应该就两个点:计算+通讯。计算用C或C++,没问题,若是实在不行,用一个翻译层,将主线程、主进程的指令翻译成Slave机的指令。通讯,我想就很好说了,否则个人Windows机和Linux机怎么能互相远程。函数
通过上面的描述,大概框架就稍微有点轮廓了。工具
限于本身知识比较有限,因此能想到的功能确实不是不少。为了适应“通用”这个想法,我以为给出的接口最好是越简单越好。既然是“计算+通讯”,那么就不妨直接就把接口拆成两部分——计算部分和通讯部分。oop
计算部分固然是给出函数、参数、数据,通讯部分就是给出Slave的位置。这里假设计算消耗 的时间要比通讯的时间长,那么下一步就能够设计出下面这样一个流程:性能
state masterSendSlave(function pointer, argument, attribute, source, address)
主线程首先执行上面的函数,其中attribute指出是是否将运行的程序、程序所需的数据发送给slave。function和argument为须要执行的程序。source为所需的数据资源。address为表示目标slave。若是slave接收到master的请求,将返回状态信息,即state。master经过state了解到谁能够干活,谁不能够干活,而后对slave进行管理。
slave接收的信息中,包括一个虚拟线程号,用于惟一标识本身。slave检测自身条件是否符合运行,若是符合,则向master发送信息,告诉master我正在执行你的请求。
当slave执行请求结束后,向master发送完成信息。master将该线程注销,并做后期处理。
目前这个框架只是初步想下,我以为应该会有很牛的人早就想到这种方法了,毕竟过去计算机单核处理能力比较弱,对于大型计算,仍是须要多核来作事。
以上仅记录下思想,欢迎拍砖。