程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 多任務環境下任務間通信模型

多任務環境下任務間通信模型

編輯:關於C語言

這本來是我和朋友之間的一個郵件討論,核心思想是在現在多任務模型下,我們程序員應該如何看待鎖和隊列,以及如何看待多進程和多線程之間通信的實做方案。 這個呢,在我的演講錄像《明日世界--雲端計算模型下的程序設計需求》中,講了一點,我這裡做個整理,發出來供大家參考。 一家之言哈,歡迎拍磚。 原文如下: 對於多任務開發模型下,不同任務之間的通信,我這麼多年,也摸索出自己的一點套路。
 
進程間通信,一般建議就用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
肖舸

本文出自 “肖舸的blog” 博客,請務必保留此出處http://tonyxiaohome.blog.51cto.com/925273/273759

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved