这本来是我和朋友之间的一个邮件讨论,核心思想是在现在多任务模型下,我们程序员应该如何看待锁和队列,以及如何看待多进程和多线程之间通信的实做方案。
这个呢,在我的演讲录像《明日世界--云端计算模型下的程序设计需求》中,讲了一点,我这里做个整理,发出来供大家参考。
一家之言哈,欢迎拍砖。
原文如下:
对于多任务开发模型下,不同任务之间的通信,我这么多年,也摸索出自己的一点套路。
进程间通信,一般建议就用socket方式,TCP、UDP都可以,主要原因,是我把一个功能性进程看做一个服务,既然是服务,就应该保持最大部署灵活性,大量采用共享内存区,信号量等方式同步,势必造成这些进程必须部署到一台机器上,就不好做未来的负载均衡了。因此,我创建npi概念,以网络地址定位信息来标定进程的访问方式,目的就是为了保持部署灵活性。
即:一个进程被视为服务器集群中的一个服务,该服务的被访问是以网络接口提供标准访问能力,可以部署在任何一台服务器上,只要调用者能以合适的方式查询到该服务的IP地址和端口,即可根据协议,请求服务并获得结果。
因此,近年来我已经摒弃了Unix和Windows等操作系统建议的所有进程共享方案,同时,也摒弃了COM接口。我认为,未来的云端计算访问模型,我这种方式会更加灵活和实用一点。
而线程间同步,我将其简化为两大类同步需求:
1、同步转异步,即本来是一个线程希望调用另外一个线程的工作,但不方便立即执行,因为容易崩溃,于是需要同步转异步。此时,我建议的模型是“队列+守候线程”方式,这个其实也正是Windows窗口的工作机制。当然,基于资源锁概念,这个队列作为被动资源,当然需要做成多线程安全的。
2、异步转同步,一个资源,被多个线程调用,比如一个socket,多个收发线程需要去调用,此时建议用锁模型,即通过同一把资源锁,将该socket所有功能方法均予以保护,之后,该socket可以称之为多线程安全socket,以后任意多的线程去调用,均为安全调用。
以上算是我抽象了多任务开发之后总结的一点对锁和队列的看法。
嗯,欢迎大家讨论和批评哈。
=======================================================
在线底价购买《0bug-C/C++商用工程之道》
(直接点击下面链接或拷贝到浏览器地址栏)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0
肖舸
进程间通信,一般建议就用socket方式,TCP、UDP都可以,主要原因,是我把一个功能性进程看做一个服务,既然是服务,就应该保持最大部署灵活性,大量采用共享内存区,信号量等方式同步,势必造成这些进程必须部署到一台机器上,就不好做未来的负载均衡了。因此,我创建npi概念,以网络地址定位信息来标定进程的访问方式,目的就是为了保持部署灵活性。
即:一个进程被视为服务器集群中的一个服务,该服务的被访问是以网络接口提供标准访问能力,可以部署在任何一台服务器上,只要调用者能以合适的方式查询到该服务的IP地址和端口,即可根据协议,请求服务并获得结果。
因此,近年来我已经摒弃了Unix和Windows等操作系统建议的所有进程共享方案,同时,也摒弃了COM接口。我认为,未来的云端计算访问模型,我这种方式会更加灵活和实用一点。
而线程间同步,我将其简化为两大类同步需求:
1、同步转异步,即本来是一个线程希望调用另外一个线程的工作,但不方便立即执行,因为容易崩溃,于是需要同步转异步。此时,我建议的模型是“队列+守候线程”方式,这个其实也正是Windows窗口的工作机制。当然,基于资源锁概念,这个队列作为被动资源,当然需要做成多线程安全的。
2、异步转同步,一个资源,被多个线程调用,比如一个socket,多个收发线程需要去调用,此时建议用锁模型,即通过同一把资源锁,将该socket所有功能方法均予以保护,之后,该socket可以称之为多线程安全socket,以后任意多的线程去调用,均为安全调用。
以上算是我抽象了多任务开发之后总结的一点对锁和队列的看法。
嗯,欢迎大家讨论和批评哈。
=======================================================
在线底价购买《0bug-C/C++商用工程之道》
(直接点击下面链接或拷贝到浏览器地址栏)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0
肖舸